【发布时间】: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 部署框看到了这个问题。