计算jar文件条目中的文件数

我正在寻找一种方法来计算 jar 文件条目中的文件数。

例如,假设我在 jar 中有一个名为“myFolder”的文件夹,我希望能够计算其中的文件数。

我从这里使用了这个想法来访问 myFolder,但我不知道如何访问里面的文件。

这是我的代码:

private int countFiles() {
    JarFile jf = null;
    int counter = 0;
    try {
        jf = new JarFile(new File(ClassName.class
                .getProtectionDomain().getCodeSource().getLocation().toURI()));
        Enumeration<JarEntry> entries = jf.entries();
        while (entries.hasMoreElements()) {
            JarEntry entry = entries.nextElement();
            if (entry.isDirectory()) {
                if (entry.getName().equals("myFolder/")) {
                    ///////
                }
            }
        }
    } catch (Exception ex) {
        try {
            jf.close();
        } catch (Exception e) {
        }
    }
    return counter;
}

感谢帮助!

回答

如果您想在 Java 中执行此操作,那么使用NIO2 API 中的ZIP 文件系统提供程序可能会更容易。

import java.io.IOException;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;

public class Main {

  public static void main(String[] args) throws IOException {
    Path jarFile = Path.of("path", "to", "file.jar");
    String directoryPath = "/myFolder";

    long fileCount = countFilesInDir(jarFile, directoryPath);
    System.out.println(fileCount);
  }

  public static long countFilesInDir(Path jarFile, String directory) throws IOException {
    try (FileSystem fs = FileSystems.newFileSystem(jarFile)) {
      return Files.list(fs.getPath(directory)).count();
    }
  }
}

如果您只想计算常规文件,请更改:

return Files.list(fs.getPath(directory)).count();

到:

return Files.list(directory).filter(Files::isRegularFile).count();

如果您想递归计算条目/文件,请查看该java.nio.file.Files#find(Path,int,BiPredicate,FileVisitOption...)方法。


注意:通常你应该关闭Stream返回的Files.list或者Files.find当它完成时,但在这种情况下它应该被关闭作为被关闭的结果FileSystem


以上是计算jar文件条目中的文件数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>