我正在尝试找出如何将目录中的文件与已批准文件的列表进行比较。我想显示丢失的文件,并删除所有多余的文件。
我的代码-
String[] approvedFiles = {"AAA.enc","LCQ.enc","MZXA.enc", "BBB.enc"};
File folder = new File("test/");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
//if (How to compare here?)
System.err.println("File " + approvedFiles[i] + " missing.");
}
我将如何实现呢?
一种简单的方法是将批准的文件数组和当前文件数组转换为集合,然后减去它们。
我首先创建一个映射,该映射将您手头的文件的字符串名称与它们的实际对应File
对象相关联。从approvedFilesSet
产生值中减去此映射的键集会产生额外的文件。如果您还需要删除这些文件,则地图会派上用场,因为File
可以从查找中获取原始对象。
String[] approvedFiles = {"AAA.enc","LCQ.enc","MZXA.enc", "BBB.enc"};
Set<String> approvedFilesSet = new HashSet<String>(Arrays.asList(approvedFiles));
File folder = new File("test/");
File[] listOfFiles = folder.listFiles();
Map<String, File> haveFilesMap = new HashMap<>();
for (File file : listOfFiles) {
if (file.isFile()) {
haveFilesMap.put(file.getName(), file);
}
}
// subtract the have files from the approved files
approvedFilesSet.removeAll(haveFilesMap.keySet());
for (String file : approvedFilesSet) {
System.err.println("File " + file + " missing.");
// uncomment the following if you also want to delete these extra files
/*
try {
Files.delete(haveFilesMap.get(file).toPath());
}
catch (Exception e) {
System.err.println("Error deleting file " + file);
}
*/
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句