5

我想用 Commons VFS2 库创建一个 zip 文件。我知道如何在使用file前缀时复制文件,但zip没有实现文件的写入和读取。

fileSystemManager.resolveFile("path comes here")zip:/some/file.zip当 file.zip 是不存在的 zip 文件时,当我尝试路径时,-方法失败。我可以解析现有文件,但不存在的新文件失败。

那么如何创建新的 zip 文件呢?我无法使用 createFile(),因为它不受支持,并且在调用它之前我无法创建 FileObject。

正常的方法是使用该 resolveFile 创建 FileObject,然后为该对象调用 createFile。

4

2 回答 2

6

我需要的答案是以下代码片段:

// Create access to zip.
FileSystemManager fsManager = VFS.getManager();
FileObject zipFile = fsManager.resolveFile("file:/path/to/the/file.zip");
zipFile.createFile();
ZipOutputStream zos = new ZipOutputStream(zipFile.getContent().getOutputStream());

// add entry/-ies.
ZipEntry zipEntry = new ZipEntry("name_inside_zip");
FileObject entryFile = fsManager.resolveFile("file:/path/to/the/sourcefile.txt");
InputStream is = entryFile.getContent().getInputStream();

// Write to zip.
byte[] buf = new byte[1024];
zos.putNextEntry(zipEntry);
for (int readNum; (readNum = is.read(buf)) != -1;) {
   zos.write(buf, 0, readNum);
}

在此之后,您需要关闭流并且它可以工作!

于 2012-05-09T15:27:35.020 回答
-1

事实上,可以使用以下 idio 从 Commons-VFS 唯一地创建 zip 文件:

        destinationFile = fileSystemManager.resolveFile(zipFileName);
        // destination is created as a folder, as the inner content of the zip
        // is, in fact, a "virtual" folder
        destinationFile.createFolder();

        // then add files to that "folder" (which is in fact a file)

        // and finally close that folder to have a usable zip
        destinationFile.close();

        // Exception handling is left at user discretion
于 2014-05-15T15:42:42.570 回答