gpt4 book ai didi

Java:如何不仅按名称搜索文件夹中的重复文件,还按大小和内容搜索重复文件?

转载 作者:行者123 更新时间:2023-11-30 05:34:54 25 4
gpt4 key购买 nike

我想创建一个 Java 应用程序来识别重复项。到目前为止,我只能通过名称找到重复项,但我还需要大小、文件类型,也许还需要内容。这是我到目前为止使用 HashMap 的代码:

public static void find(Map<String, List<String>> lists, File dir) {
for (File f : dir.listFiles()) {
if (f.isDirectory()) {
find(lists, f);
} else {
String hash = f.getName() + f.length();
List<String> list = lists.get(hash);
if (list == null) {
list = new LinkedList<String>();
lists.put(hash, list);
}
list.add(f.getAbsolutePath());
}
}
}

最佳答案

我使用 MessageDigest 并检查了一些文件,并根据我在标题和描述中列出的所有标准查找重复项。谢谢大家。

private static MessageDigest messageDigest;
static {
try {
messageDigest = MessageDigest.getInstance("SHA-512");
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("cannot initialize SHA-512 hash function", e);
}
}

这是在重复项搜索代码中实现后的结果

public static void find(Map<String, List<String>> lists, File dir) {
for (File f : dir.listFiles()) {
if (f.isDirectory()) {
find(lists, f);
} else {
try{
FileInputStream fi = new FileInputStream(f);
byte fileData[] = new byte[(int) f.length()];
fi.read(fileData);
fi.close();
//Crearea id unic hash pentru fisierul curent
String hash = new BigInteger(1, messageDigest.digest(fileData)).toString(16);
List<String> list = lists.get(hash);
if (list == null) {
list = new LinkedList<String>();
}
//Adăugați calea către listă
list.add(f.getAbsolutePath());
//Adauga lista actualizată la tabelul Hash
lists.put(hash, list);

}catch (IOException e) {
throw new RuntimeException("cannot read file " + f.getAbsolutePath(), e);
}

}
}

}

关于Java:如何不仅按名称搜索文件夹中的重复文件,还按大小和内容搜索重复文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56853073/

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