2016-07-11 21 views
0

私は、スキップする必要があり、ターゲットのZIPファイルに追加されないいくつかのフォルダを持つディレクトリを持っています。 Windowsに隠されたように私はそれらをマークし、次のように私は、Javaコードを使用してこの属性を照会することができますZip4j Zipからフォルダを除外する

new File("C:\\myHiddenFolder").isHidden(); 

しかし、私はそれらのそれぞれのディレクトリを追加スキップするには、以下のZip4jベースの方法でこれを使用する方法がわかりません:

public File createZipArchive(String sourceFilePath) throws ZipException, IOException 
{ 
    ZipParameters zipParameters = new ZipParameters(); 
    zipParameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); 
    zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_ULTRA); 
    zipParameters.setEncryptFiles(true); 
    zipParameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES); 
    zipParameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256); 
    zipParameters.setPassword("MyPassword"); 

    String baseFileName = FileNameUtilities.getBaseFileName(sourceFilePath); 
    String destinationZipFilePath = baseFileName + "." + EXTENSION; 

    ZipFile zipFile = new ZipFile(destinationZipFilePath); 
    File sourceFile = new File(sourceFilePath); 

    // Recursively add directories 
    if (sourceFile.isDirectory()) 
    { 
     File[] childrenFiles = sourceFile.listFiles(); 

     if (childrenFiles != null) 
     { 
      for (File folder : childrenFiles) 
      { 
       if (folder.isHidden()) // Nope, no recursive checking! 
       { 
        // This is the problem, it adds the parent folder and all child folders without allowing me to check whether to exclude any of them... 
        zipFile.addFolder(folder.getAbsolutePath(), zipParameters); 
       } 
      } 
     } 
    } else 
    { 
     // Add just the file 
     zipFile.addFile(new File(sourceFilePath), zipParameters); 
    } 

    return zipFile.getFile(); 
} 

この方法は、(隠された)フォルダが最も高いレベルにある場合にのみ機能しますが、どの深度でも機能するはずです。

答えて

0

HiddenDirectoriesMover hiddenDirectoriesMover = new HiddenDirectoriesMover(sourceFilePath); 
     hiddenDirectoriesMover.removeFiles(); 

// Create zip 

hiddenDirectoriesMover.returnFiles(); 

汚い回避策をしかしzipParameters.setReadHiddenFiles(false);is not working as expectedので、仕事をしていません:

public static ArrayList getFilesInDirectoryRec(File path, 
     boolean readHiddenFiles) throws ZipException { 

    if (path == null) { 
     throw new ZipException("input path is null, cannot read files in the directory"); 
    } 

    ArrayList result = new ArrayList(); 
    File[] filesAndDirs = path.listFiles(); 
    List filesDirs = Arrays.asList(filesAndDirs); 

    if (!path.canRead()) { 
     return result; 
    } 

    for(int i = 0; i < filesDirs.size(); i++) { 
     File file = (File)filesDirs.get(i); 
     if (file.isHidden() && !readHiddenFiles) { 
      // The first hidden file causes a return and skipping everything else (!) 
      return result; 
     } 
     result.add(file); 
     if (file.isDirectory()) { 
      List deeperList = getFilesInDirectoryRec(file, readHiddenFiles); 
      result.addAll(deeperList); 
     } 
    } 
    return result; 
} 
-1

zipParameters.setReadHiddenFiles(false);を追加できます.zip4jは、隠しフォルダとファイルをZipFileに追加しません。私は、すべての隠しフォルダを移動して行きました。この、パッケージzipファイルを解決し、フォルダをバックに移動するには

+0

最初の隠しフォルダが見つかったときに停止するので、間違っています。私も実装を読んで、それが何をしているのです。 – BullyWiiPlaza

関連する問題