Android编写一个在根据HD5值当前目录下所有的文件中寻找所有相同文件并且将相同文件名和路径全部输出的代码
时间: 2024-06-09 07:08:47 浏览: 152
以下是一个实现该功能的Android代码示例:
```java
import java.io.File;
import java.io.FileInputStream;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class FindSameFiles {
private static final String ALGORITHM = "MD5";
public static void main(String[] args) {
String dirPath = "/sdcard/"; // 指定目录路径
Map<String, List<String>> fileMap = new HashMap<>(); // 存储相同文件的路径
File dir = new File(dirPath);
if (dir.isDirectory()) {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isFile()) {
String md5 = getFileMD5(file);
if (fileMap.containsKey(md5)) {
fileMap.get(md5).add(file.getAbsolutePath());
} else {
List<String> list = new ArrayList<>();
list.add(file.getAbsolutePath());
fileMap.put(md5, list);
}
}
}
}
for (Map.Entry<String, List<String>> entry : fileMap.entrySet()) {
List<String> list = entry.getValue();
if (list.size() > 1) { // 只输出有重复文件的项
System.out.println("重复文件: " + entry.getKey());
for (String path : list) {
System.out.println(path);
}
}
}
}
private static String getFileMD5(File file) {
try {
MessageDigest md5 = MessageDigest.getInstance(ALGORITHM);
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) != -1) {
md5.update(buffer, 0, length);
}
fis.close();
byte[] digest = md5.digest();
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b));
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
```
该示例代码使用了Java的MessageDigest类来计算文件的MD5值,并使用HashMap来存储相同MD5值的文件路径。最后输出所有重复的文件路径。你可以将该代码转换为Android应用程序并在需要的时候运行。注意需要在AndroidManifest.xml文件中申请读取存储的权限。
阅读全文