2016-05-07 13 views
2

Ich versuche, eine Reihe von Dateien von verschiedenen Orten in einen Zip-Ordner mit Zip4J zu zippen. Ich habe eine ArrayList von Dateien aus verschiedenen Ordnern, und während ich die Liste durchlaufe, die "zip.AddFile (Datei, Parameter)" aufruft, werden die Dateien gut hinzugefügt, bis der Ordner, aus dem die Dateien stammen, wechselt. Und ich bekomme die folgende Fehlermeldung,Zip4J, Nullzeiger Ausnahme durch externen Dateistream verursacht?

net.lingala.zip4j.exception.ZipException: java.lang.NullPointerException 
     at net.lingala.zip4j.zip.ZipEngine.initAddFiles(ZipEngine.java:187) 
     at net.lingala.zip4j.zip.ZipEngine.addFiles(ZipEngine.java:85) 
     at net.lingala.zip4j.core.ZipFile.addFiles(ZipFile.java:292) 
     at net.lingala.zip4j.core.ZipFile.addFile(ZipFile.java:250) 
     at tasks.OutputTask.compressFiles(OutputTask.java:627) 
     at tasks.OutputTask.uploadHelper(OutputTask.java:550) 
     at tasks.OutputTask.uploadHelper(OutputTask.java:593) 
     at tasks.OutputTask.uploadHelper(OutputTask.java:593) 
     at tasks.OutputTask.uploadHelper(OutputTask.java:593) 
     at tasks.OutputTask.uploadHelper(OutputTask.java:593) 
     at tasks.OutputTask.upload(OutputTask.java:516) 
     at tasks.OutputTask.call(OutputTask.java:279) 
     at tasks.OutputTask.call(OutputTask.java:1) 
     at javafx.concurrent.Task$TaskCallable.call(Unknown Source) 
     at java.util.concurrent.FutureTask.run(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
     at java.lang.Thread.run(Unknown Source) 
    Caused by: java.lang.NullPointerException 
     at net.lingala.zip4j.zip.ZipEngine.prepareFileOutputStream(ZipEngine.java:433) 
     at net.lingala.zip4j.zip.ZipEngine.removeFilesIfExists(ZipEngine.java:385) 
     at net.lingala.zip4j.zip.ZipEngine.initAddFiles(ZipEngine.java:109) 
     ... 17 more 

Der Code selbst ist

 ZipFile zip; 
     try { 
      System.out.println("Creating zip: " + outputName); 
      File zipfile; 
      if ((zipfile = new File(outputName)).exists()) { 
       zipfile.delete(); 
      } 
      zip = new ZipFile(new File(outputName)); 

      ZipParameters params = new ZipParameters(); 
      if (encrypt) { 
       params.setEncryptFiles(true); 
       params.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES); 
       params.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256); 
       params.setPassword(Property.AES_ENCRYPTION_KEY.getValue()); 

      } 
      params.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); 
      params.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); 
      for (File file : sourceFiles) { 
       if (file.isFile()) { 
        try { 
         zip.addFile(file, params); 
        } catch (ZipException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 

So zum Beispiel, hier ist die Liste der Dateien

files = {C:/Folder1/img1, C/Folder1/txtFile, C:/Folder1/jar, C:/Folder2/img2}

Der Code wird ordnungsgemäß ausgeführt, bis es das "C:/Folder2/img2" trifft, wo es den obigen Fehler zurückgibt. Ich habe versucht

, die einen anderen Fehler bietet, sagen, dass es keinen Namen für die externe Quelldatei gibt. Jede Hilfe würde sehr geschätzt werden. Vielen Dank im Voraus

Antwort

0

Versuchen Sie, params.setFileNameInZip (Dateiname); params.setSourceExternalStream (true);

Verwandte Themen