不删除文件

时间:2019-06-15 17:58:21

标签: java

我在这里有这种方法。我想列出特定文件夹中的所有文件。我想全部读取它们,如果文件中有一行超过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();
    }
}

2 个答案:

答案 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中。如果删除时遇到任何错误,请发表。

相关问题