下面的例子中,我们使用java.util.zip
包的 ZipInputStream 读取一个 ZipFile,然后一个一个读取所有 ZipEntry。
然后使用 FileOutputStream 将所有文件写入文件系统。
import java.io.BufferedInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.file.FileSystem; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class Main { public static void main(String[] args) { // 打开文件 try(ZipFile file = new ZipFile("files.zip")) { FileSystem fileSystem = FileSystems.getDefault(); // 获取文件 ZipEntry Enumeration<? extends ZipEntry> entries = file.entries(); //We will unzip files in this folder String uncompressedDirectory = "uncompressed/"; Files.createDirectory(fileSystem.getPath(uncompressedDirectory)); // 遍历 ZipEntry while (entries.hasMoreElements()) { ZipEntry entry = entries.nextElement(); // 如果是目录,则创建目录 if (entry.isDirectory()) { System.out.println("Creating Directory:" + uncompressedDirectory + entry.getName()); Files.createDirectories(fileSystem.getPath(uncompressedDirectory + entry.getName())); } // 如果是文件,则创建文件 else { InputStream is = file.getInputStream(entry); BufferedInputStream bis = new BufferedInputStream(is); String uncompressedFileName = uncompressedDirectory + entry.getName(); Path uncompressedFilePath = fileSystem.getPath(uncompressedFileName); Files.createFile(uncompressedFilePath); FileOutputStream fileOutput = new FileOutputStream(uncompressedFileName); while (bis.available() > 0) { fileOutput.write(bis.read()); } fileOutput.close(); System.out.println("Written :" + entry.getName()); } } } catch(IOException e) { e.printStackTrace(); } } }
日期:2020-09-17 00:09:28 来源:oir作者:oir