用Android Studio编一个用户指定文件目录,查找目录下所有重复文件的代码
时间: 2024-05-10 13:19:45 浏览: 81
Sure, 我可以为你提供帮助。以下是用 Android Studio 编写的查找重复文件的代码:
```java
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class FindDuplicateFiles {
public static void main(String[] args) {
String basePath = "/user/specified/directory"; // 替换成你指定的目录路径
File baseDir = new File(basePath);
if (!baseDir.exists() || !baseDir.isDirectory()) {
System.out.println("指定目录不存在或不是一个目录!");
return;
}
Map<String, List<File>> fileMap = new HashMap<>();
List<File> possibleDuplicates = new ArrayList<>();
for (File file : baseDir.listFiles()) {
if (!file.isFile()) {
continue;
}
String hash = getFileHash(file);
if (hash == null) {
System.out.println("无法获取文件哈希值: " + file.getName());
continue;
}
List<File> sameHashFiles = fileMap.get(hash);
if (sameHashFiles == null) {
sameHashFiles = new ArrayList<>();
fileMap.put(hash, sameHashFiles);
}
sameHashFiles.add(file);
}
for (List<File> sameHashFiles : fileMap.values()) {
if (sameHashFiles.size() > 1) {
possibleDuplicates.addAll(sameHashFiles);
}
}
if (possibleDuplicates.isEmpty()) {
System.out.println("没有找到重复的文件!");
} else {
System.out.println("以下是重复的文件:");
for (File file : possibleDuplicates) {
System.out.println(file.getAbsolutePath());
}
}
}
private static String getFileHash(File file) {
try (InputStream inputStream = new FileInputStream(file)) {
MessageDigest digest = MessageDigest.getInstance("MD5");
byte[] buffer = new byte[8192];
int read = 0;
while ((read = inputStream.read(buffer)) > 0) {
digest.update(buffer, 0, read);
}
byte[] hashBytes= digest.digest();
BigInteger bigInt = new BigInteger(1, hashBytes);
String hash = bigInt.toString(16);
while (hash.length() < 32) {
hash = "0" + hash;
}
return hash;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}
```
希望这能够对你有所帮助!
阅读全文