我在这里有这种方法。我想列出特定文件夹中的所有文件。我想全部读取它们,如果文件中有一行超过5个字符,我想将其删除。我在做什么错了?
public void read() throws IOException {
File[] fajllat = folder.listFiles((File f) -> f.isFile());
int count = 0;
String line = null;
for (File file : fajllat) {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
while ((line = br.readLine()) != null) {
if (line.length() > 5) {
count++;
file.delete();
}
}
}
FileWriter fw = new FileWriter("C://Users//Admin//Desktop//foldtest123");
BufferedWriter bw = new BufferedWriter(fw);
try (PrintWriter pw = new PrintWriter(bw)) {
pw.println(count);
pw.close();
}
}
答案 0 :(得分:1)
为了查看出现了什么问题并且没有删除文件,请使用Files.delete(file.toPath());
而不是File#delete
方法。 java.nio.Files#delete
方法将引发异常,然后您将能够知道...
另外,值得一读:question.
答案 1 :(得分:0)
您是否使用file.delete()的布尔结果检查文件是否被删除?我认为你应该这样做。同样,一旦删除了文件,请中断while循环并继续下一个文件。我已经修改了包含以上两个发现的代码。
File directory = new File("XXXX/XXXX/XXXX/XXXX/");
if(!directory.isDirectory()) {
System.out.println("Given file is not a directory");
return;
}
String line;
int count = 0;
File[] fileList = directory.listFiles(File::isFile);
if(fileList != null && fileList.length > 0) {
for (File file : fileList) {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
while ((line = br.readLine()) != null) {
if (line.length() > 5) {
count++;
boolean wasFileDeleted = file.delete();
if(wasFileDeleted) {
System.out.println("The file "+file.getName()+" was deleted");
} else {
System.out.println("The file "+file.getName()+" deletion did not succeed");
}
break;
}
}
}
}
System.out.println("A total of "+count+" files were deleted");
我能够使用与您相同的代码删除目录中的所有文件。这是在Mac中。如果删除时遇到任何错误,请发表。