Я пытаюсь написать программу, которая удалит все повторяющиеся файлы в каталоге. В настоящее время он способен обнаруживать дубликаты, но мой код удаления, похоже, не работает (Files.delete()
возвращает false
). Может ли кто-нибудь сказать мне, почему это так?Не удается удалить файлы в заданном каталоге
Текущий код:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.lang.SecurityManager;
public class Duplicate {
@SuppressWarnings("resource")
public static boolean isDuplicate(File a, File b) throws IOException {
FileInputStream as = new FileInputStream(a);
FileInputStream bs = new FileInputStream(b);
while(true) {
int aBytes = as.read();
int bBytes = bs.read();
if(aBytes != bBytes) {
return false;
} else if(aBytes == -1) {
System.out.println("Duplicate found: "+a.getName()+", "+b.getName());
return true;
}
}
}
public static void main(String[] args) throws IOException {
File dir = new File(System.getProperty("user.dir"));
File[] files = dir.listFiles();
for(int i = 0; i < files.length; i++) {
for(int j = i+1; j < files.length; j++) {
if(isDuplicate(files[i], files[j])) {
String filePath = System.getProperty("user.dir").replace("\\", "/")+"/"+files[i].getName();
System.out.println("Deleting "+filePath);
File f = new File(filePath);
if(f.delete())
System.out.println(filePath+" deleted successfully");
else
System.out.println("Could not delete "+filePath);
}
}
}
}
}
В 'if (isDuplicate (файлы [i], файлы [j]))' почему вы воссоздаете файловый объект? Просто удалите один из дубликатов, например 'files [i] .delete()' – Athafoud
Сделайте себе одолжение и используйте java.nio.file. По крайней мере, исключение возникает, если удаление файла не выполняется ... – fge