2016-05-07 20 views
2

私はZip4Jを使用して、さまざまな場所にある複数のファイルを1つのzipフォルダに圧縮しようとしています。私は、別のフォルダからのファイルのArrayListを持って、私は "Zip.AddFile(ファイル、params)"を呼び出すリストをループすると、ファイルがスイッチから来ているフォルダまで細かく追加されます。/Folder1の/ IMG1、C:そして、私は、コード自体がZip4J、Null Pointer外部ファイルストリームによる例外?

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

だから例えば、ここにファイル

ファイル= {Cのリストがあるさ

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 

、次のエラーを取得します/ Folder1/txtFile、C:/ Folder1/jar、C:/ Folder2/img2}

上記のエラーを返す "C:/ Folder2/img2"にヒットするまで、コードは正常に実行されます。私は試しました

params.setSourceExternalStream(true); 

外部ソースファイルの名前がないという異なるエラーを提供します。どんな助けでも大歓迎です。ありがとうございます。

答えて

0

params.setFileNameInZip(filename); params.setSourceExternalStream(true);