【问题标题】:Not deleting the files不删除文件
【发布时间】:2019-06-15 17:58:21
【问题描述】:

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

【问题讨论】:

    标签: java


    【解决方案1】:

    为了查看发生了什么问题并且文件没有被删除,请使用Files.delete(file.toPath()); 而不是File#delete 方法。 java.nio.Files#delete 方法会抛出异常,然后你就能知道...

    另外,值得一读:question.

    【讨论】:

      【解决方案2】:

      您是否使用 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中。如果您在删除时遇到任何错误,请发布。

      【讨论】:

      • 我想补充一点,这是在 Mac 上完成的。 OP,您要在哪台机器上执行此操作?
      • 可以验证是否有权限删除目录。
      • @user1929959 - 没有得到你。你能解释一下你想说什么吗?
      猜你喜欢
      • 2017-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      • 2020-11-27
      • 2014-04-26
      • 1970-01-01
      相关资源
      最近更新 更多