java - 计算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
而关闭。
推荐阅读
- java - Java.IO.io 异常处理
- java - Cucumber:在执行第一个脚本“警告:在类路径中找不到功能:/Runner”时显示
- javascript - 在 nodejs 中将货币符号写入文件的问题
- azure-sql-database - 将 ssis 2008 c# 架构升级到 2016 for azure
- vue.js - 如何在测试模式而不是生产模式下运行赛普拉斯?
- javascript - 在另一个屏幕中更改状态也会更改 DrawerNavigation 的状态
- azure-devops - Azure DevOps - 迭代更改
- sql - 在使用分区创建新列时,我得到了?在新列数据中
- excel - 以月为单位计算日期之间的差异,并根据定义的截止日期 MS EXCEL
- javascript - 用于在 cypress 中选择复选框的自定义命令