訪問 ZIP 檔案的內容

Java 7 的 FileSystem API 允許使用 Java NIO 檔案 API 從 Zip 檔案讀取和新增條目,其操作方式與在任何其他檔案系統上操作相同。

FileSystem 是一種在使用後應該正確關閉的資源,因此應該使用 try-with-resources 塊。

從現有檔案中讀取

Path pathToZip = Paths.get("path/to/file.zip");
try(FileSystem zipFs = FileSystems.newFileSystem(pathToZip, null)) {
  Path root = zipFs.getPath("/");
  ... //access the content of the zip file same as ordinary files
} catch(IOException ex) {
  ex.printStackTrace();
}

建立一個新檔案

Map<String, String> env = new HashMap<>();  
env.put("create", "true"); //required for creating a new zip file
env.put("encoding", "UTF-8"); //optional: default is UTF-8
URI uri = URI.create("jar:file:/path/to/file.zip");
try (FileSystem zipfs = FileSystems.newFileSystem(uri, env)) {
  Path newFile = zipFs.getPath("/newFile.txt");
  //writing to file
  Files.write(newFile, "Hello world".getBytes());
} catch(IOException ex) {
  ex.printStackTrace();
}