gpt4 book ai didi

Java 遍历目录中的所有文件和唯一的 RAR 存档

转载 作者:行者123 更新时间:2023-11-29 03:45:09 35 4
gpt4 key购买 nike

如何遍历目录中的所有 RAR 存档。我知道如何遍历目录中的文件,但我只对 RAR 存档感兴趣。如果它们是扩展名为 .rar 的简单 RAR 存档,那将不是问题,但我的目录可以有多个跨区存档,我只想要集合中的第一个/主要卷。我还想在目录中包含其他文件:

以下是示例目录的内容:

  • file.txt
  • somefile.zip
  • 你好.rar
  • test.part1.rar
  • test.part2.rar
  • example.rar
  • example.r00

结果:

  • file.txt
  • somefile.zip
  • 你好.rar
  • test.part1.rar
  • example.rar

这就是我正在使用的 ti 遍历目录:

  import java.io.File;

...

for (File child : (new File(myDirectoryPath)).listFiles()) {
if (!child.isDirectory()) {
//Do something with the file
}
}

我该怎么做?我需要检测它是否是 RAR 压缩包。如果不是,请使用它。如果是,我需要检查它是否是存档的第一部分。如果是,则执行任何操作,否则忽略它。

谢谢

最佳答案

找到解决方案的困难在于,当 .rar 文件跨越多个文件时,没有固定的命名技术。此外,没有什么可以阻止用户创建一个随机文件,该文件的名称就好像它是跨区 rar 部分之一一样。确定这一点的唯一正确方法是实际读取每个可疑文件的内容,看看这是否是跨区 rar 文件的延续。除了复杂之外,这也会慢得令人无法接受。

然而,在大多数情况下,分割文件的名称要么是 file.rarfile.rXX(恰好 2 位数字)作为延续,要么是 file.partXXX .rar,第一个文件是file.part1.rar(XXX从1开始到最大数)。因此,您可以尝试使用 FilenameFilter 来捕获这两种情况,如下所示。

这种方法的缺点是,如果文件恰好被随机命名,它会丢弃文件,例如,somefile.part2.rarotherfile.r03,然而,希望这对您有很大帮助。

for (File child : (new File(myDirectoryPath)).listFiles(new FilenameFilter() {
private Pattern p1 = null;
private Pattern p2 = null;
public boolean accept(File dir, String name) {

name = name.toLowerCase();

if(p1 == null) {
p1 = Pattern.compile("\\.r\\d\\d");
p2 = Pattern.compile("\\.part\\d+\\.rar");
}

if(name.endsWith(".part1.rar")) {
return true;
}
else if(p2.matcher(name).matches()) {
return false;
}
else {
return !p1.matcher(name).matches();
}
}
}) {
if (!child.isDirectory()) {
//Do something with the file
}
}

关于Java 遍历目录中的所有文件和唯一的 RAR 存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11313632/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com