繁体   English   中英

为什么 Java 中的 FileWriter 不经常工作但有时工作?

[英]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 个重要问题……还有一些不是最理想的。

问题 #1

正如@Preston 指出的那样, file.getName()是不正确的。 在您的示例中,它将返回与您开始使用的路径名不同的"test_appendfile.txt"

这有什么不同吗? 好吧,这取决于 JVM 的工作目录是什么! 如果它是"D://"那么你没问题。 否则你将在当前目录而不是"D://"中写入一个文件,这可以解释为什么“ "D:// ://”中的文件是空的。

您应该使用file作为构造函数参数。

问题#2

如果在try块中较早抛出异常,则不会发生close()调用。 如果close()调用没有发生,则FileWriter缓冲区不一定会被刷新,您可能会丢失 output。

您应该对资源使用 try,以便FileWriter始终关闭。

close()之前(或其他任何地方)显式调用flush()不是解决方案。 较早的异常也会导致它被跳过。

次优代码

这是不必要的:

        if (!file.exists()) {
            file.createNewFile();
        }

该文件将由new FileWriter(file, true); 如果它还不存在。 所以上面没有达到任何目的。

其他一些可能的解释

您没有向我们展示程序的导入语句,因此FileFileWriter可能不是标准类。

可能是“其他东西”阻止了写入; 例如D:可能安装了只读文件系统,或者某些防病毒产品可能会产生干扰,或类似的情况。

您为 FileWriter 构造函数提供了错误的参数。
只需更改
FileWriter fileWritter = new FileWriter(file.getName(),true);

FileWriter fileWritter = new FileWriter(file,true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM