【问题标题】:Java 6 File DeletionJava 6 文件删除
【发布时间】:2011-11-11 16:35:41
【问题描述】:

我知道这个问题是this 问题的严重重复。 但是,我现在已经将整页阅读了两次,有些部分阅读了 3 次,而且我一生都看不到它是如何/在哪里得到答案的!

那么,继续我的问题。

我在工作,卡在使用 Java 6 SE,无法升级到 7。我正在编写一个程序来创建一个文件,写入文件,进行一些处理,然后需要删除该文件。我遇到的问题与提出我上面提到的问题的人完全相同:Java 不会删除文件,我不知道为什么。

代码:

File f = null;
FileWriter fw = null;
try
{
    f = new File("myFile.txt");
    fw = new FileWriter(f);
    fw.write("This is a sentence that should appear in the file.");
    fw.flush();
    if(f.delete())
        System.out.println("File was successfully deleted.");
    else
        System.err.println("File was not deleted.");
}
catch(Exception exc)
{
    System.err.println(exc.getMessage());
}
catch(Error er    {
    System.err.println(er.getMessage());
}
catch(Throwable t)
{
    System.err.println(t.getMessage());
}
finally
{
    fw.close();
}

它不会抛出任何可抛出的、错误或异常(我包括那些以排除 any 和所有边缘情况)。第二个打印语句 ("File was not deleted.") 正在打印到控制台。我在 Windows 7 上运行它并写入我拥有完全权限 (rwx) 的文件夹。

提出我提到的问题的用户回答了他自己的问题,但这样做(以我的拙见)以一种不那么直截了当的方式。无论如何,我很难理解它。他/她似乎在暗示使用BufferedReader 而不是FileInputStream 对他/她产生了影响,但我只是不明白这是如何应用的。

Java 7 似乎通过引入 java.nio.file.Files 类解决了这个问题,但同样,由于我无法控制的原因,我无法使用 Java 7。

对该引用问题的其他回答者暗示这是 Java 中的一个“错误”,并给出了各种规避方法,例如显式调用 System.gc() 等。我已经尝试了所有这些方法,但它们都不起作用。

也许有人可以为我添加一个新的视角并慢慢思考。

【问题讨论】:

  • 我不认为这是重复的。由于您尝试了其他问题的建议解决方案,但它们没有帮助,原因可能是不同的。
  • 先关闭它。而且...“卡住了使用 Java 6?”我不知道有哪家公司在 JDK7 上运行。我知道很多在 1.4 和 1.5 上。认为自己很幸运。
  • 请注意您所说的相反:使用 FileInputStream 而不是 BufferedReader 对另一篇文章中的用户有用。至于它为什么适用,那里的一些评论表明它是 Java 中的一个错误。
  • 对于同样遇到此问题的人的问题——您使用的是什么操作系统/版本和高清?我们一直在使用 Intel X-25M SSD 的 Win7 64 位开发工作站上遇到此问题。但是,我不相信我们的 linux 部署框看到了这个问题。

标签: java file io java-6


【解决方案1】:

您正在尝试删除()一个仍被活动的、打开的 FileWriter 引用的文件。

试试这个:

f = new File("myFile.txt");
fw = new FileWriter(f);
fw.write("This is a sentence that should appear in the file.");
fw.flush();
fw.close(); // actually free any underlying file handles.
if(f.delete())
    System.out.println("File was successfully deleted.");
else
    System.err.println("File was not deleted.");

【讨论】:

    【解决方案2】:

    只有在没有打开文件处理程序的情况下才能删除文件。由于您使用FileWriter 打开文件处理程序,因此您需要先将其关闭,然后才能将其删除。也就是说f.delete必须在fw.close之后执行

    试试下面的代码。我进行了更改以防止您可能发现的所有可能的错误,例如如果 fw 为空。

    File f = null;
    FileWriter fw = null;
    try {
        f = new File("myFile.txt");
        fw = new FileWriter(f);
        fw.write("This is a sentence that should appear in the file.");
        fw.flush(); // flush is not needed if this is all your code does. you data
                    // is automatically flushed when you close fw
    } catch (Exception exc) {
        System.err.println(exc.getMessage());
    } finally {// finally block is always executed.
        // fw may be null if an exception is raised in the construction 
        if (fw != null) {
            fw.close();
        }
        // checking if f is null is unneccessary. it is never be null.
        if (f.delete()) {
            System.out.println("File was successfully deleted.");
        } else {
            System.err.println("File was not deleted.");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多