2012-05-08 2 views
5

Я хотел бы создать zip-файл с библиотекой Commons VFS2. Я знаю, как копировать файл при использовании префикса file, но для zip файлы записи и чтения не реализованы.Привет, пример мира на VFS: создать zip-файл с нуля

fileSystemManager.resolveFile("path comes here") -method не работает, когда я пытаюсь указать путь zip:/some/file.zip, когда file.zip является несуществующим zip-файлом. Я могу разрешить существующий файл, но несуществующий новый файл выходит из строя.

Так как же создать этот новый zip-файл? Я не могу использовать createFile(), потому что он не поддерживается, и я не могу создать FileObject, прежде чем это будет вызвано.

Обычный способ - создать FileObject с этим файлом resolveFile, а затем вызвать createFile для объекта.

ответ

5

Ответа на мою потребность есть следующий фрагмент кода:

// 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); 
} 

После этого нужно закрыть потоки, и это работает!

-1

В самом деле, можно создать файлы почтового индекса однозначно из Commons-VFS с помощью следующей idio:

 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 
+0

'org.apache.commons.vfs2.FileSystemException: Этот тип файла не поддерживает создание папок .' –

Смежные вопросы