2012-05-08 12 views
5

Vorrei creare un file zip con la libreria Commons VFS2. So come copiare un file quando si usa il prefisso file ma per i file zip i file di scrittura e lettura non sono implementati.Ciao esempio mondiale su VFS: creare un file zip da zero

fileSystemManager.resolveFile("path comes here") -metodo non riesce quando si tenta il percorso zip:/some/file.zip quando file.zip è un file zip non esistente. Posso risolvere un file esistente ma il nuovo file non esistente fallisce.

Quindi, come creare il nuovo file zip? Non riesco a utilizzare createFile() perché non è supportato e non riesco a creare FileObject prima che venga chiamato.

Il modo normale è creare FileObject con quel file di risoluzione e quindi chiamare createFile per l'oggetto.

risposta

5

La risposta alla mia necessità è il seguente frammento di codice:

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

Dopo questo è necessario chiudere i flussi e funziona!

-1

In realtà, è possibile creare file zip in modo univoco da Commons-VFS utilizzando il seguente 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: Questo tipo di file non supporta la creazione di cartelle .' –