![](/img/trans.png)
[英]Why does my really really simple Java program which doesn't yet do anything sometimes work and sometimes doesn't?
[英]Why doesn't FileWriter in Java work often but sometimes does work?
public static void main( String[] args )
{
try{
String content = "hello";
File file =new File("d:\\test_appendfile.txt");
if(!file.exists()){
file.createNewFile();
}
FileWriter fileWritter = new FileWriter(file.getName(),true);
fileWritter.write(content);
fileWritter.close();
}catch(IOException e){
e.printStackTrace();
}
}
通常,像 90% 的可能性一样,“test_appendfile.txt”中没有任何内容。 但是,有时,内容会成功写入“test_appendfile.txt”。 为什么?
您的代码至少有 2 个重要问题……还有一些不是最理想的。
正如@Preston 指出的那样, file.getName()
是不正确的。 在您的示例中,它将返回与您开始使用的路径名不同的"test_appendfile.txt"
。
这有什么不同吗? 好吧,这取决于 JVM 的工作目录是什么! 如果它是"D://"
那么你没问题。 否则你将在当前目录而不是"D://"
中写入一个文件,这可以解释为什么“ "D://
://”中的文件是空的。
您应该使用file
作为构造函数参数。
如果在try
块中较早抛出异常,则不会发生close()
调用。 如果close()
调用没有发生,则FileWriter
缓冲区不一定会被刷新,您可能会丢失 output。
您应该对资源使用 try,以便FileWriter
始终关闭。
在close()
之前(或其他任何地方)显式调用flush()
不是解决方案。 较早的异常也会导致它被跳过。
这是不必要的:
if (!file.exists()) {
file.createNewFile();
}
该文件将由new FileWriter(file, true);
如果它还不存在。 所以上面没有达到任何目的。
您没有向我们展示程序的导入语句,因此File
或FileWriter
可能不是标准类。
可能是“其他东西”阻止了写入; 例如D:
可能安装了只读文件系统,或者某些防病毒产品可能会产生干扰,或类似的情况。
您为 FileWriter 构造函数提供了错误的参数。
只需更改FileWriter fileWritter = new FileWriter(file.getName(),true);
到FileWriter fileWritter = new FileWriter(file,true);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.