首页 > 解决方案 > 计算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;
}

感谢帮助!

标签: javajar

解决方案


如果您想在 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.listFiles.find完成后返回,但在这种情况下,它应该作为关闭的结果FileSystem而关闭。


推荐阅读