2012-05-08 6 views
5

Ich möchte eine Zip-Datei mit Commons VFS2-Bibliothek erstellen. Ich weiß, wie man eine Datei kopiert, wenn man file Vorwahl verwendet, aber für zip Dateien schreiben und lesen sind nicht implementiert.Hallo Welt Beispiel auf VFS: Erstellen Sie eine Zip-Datei von Grund auf neu

fileSystemManager.resolveFile("path comes here") -Methode schlägt fehl, wenn ich Pfad zip:/some/file.zip versuche, wenn file.zip eine nicht vorhandene zip-Datei ist. Ich kann eine vorhandene Datei auflösen, aber eine nicht vorhandene neue Datei schlägt fehl.

Also, wie diese neue Zip-Datei dann zu erstellen? Ich kann createFile() nicht verwenden, weil es nicht unterstützt wird, und ich kann das FileObject nicht erstellen, bevor dieses aufgerufen werden soll.

Der normale Weg besteht darin, FileObject mit dieser resolveFile zu erstellen und dann createFile für das Objekt aufzurufen.

Antwort

5

Die Antwort auf mein Bedürfnis ist der folgende Code-Schnipsel:

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

Danach Sie die Ströme schließen müssen und es funktioniert!

-1

In der Tat ist es möglich, ZIP-Dateien eindeutig von Commons-VFS zu erstellen, indem Sie den folgenden idio mit:

 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: Dieser Dateityp nicht Ordnererstellung nicht unterstützt .' –