【问题标题】:Java BufferedWriter doesn't write to fileJava BufferedWriter 不写入文件
【发布时间】:2018-05-01 13:31:03
【问题描述】:

我想将一些字符串写入文件(使用 Java 8)。这段代码 sn-p 编译没有任何错误,但不写入文件....我是菜鸟 ofcorz...有什么建议吗?

import java.io.BufferedWriter;
import java.io.FileWriter;

public class Main {
    private static final String FILENAME = "C:\\IntelliJfiles\\write-to- 
                                              file\\src\\pl\\sca\\file.txt";

    public static void main(String[] args) {

        try {
            String str = "kal";

            BufferedWriter writer = new BufferedWriter(new 
            FileWriter(FILENAME));
            writer.write(str);

            System.out.println("Done");

        }
        catch (Exception e) {
            System.out.println("There's no file");
            e.printStackTrace();
        }
    }
}

【问题讨论】:

  • 您应该在写入文件后关闭该文件。永远不要让资源处于打开状态。你应该使用“尝试资源”
  • writer.close(); 有帮助吗?
  • 尝试资源或添加writer.close();
  • writer.close();帮助,谢谢:)

标签: java bufferedwriter


【解决方案1】:

在您关闭文件之前,它可能不会写入文件 - 写入磁盘非常耗时,因此它会等到写入足够的字符后再将它们实际放入文件中。这就是 BufferedWriter 中的 Buffered 的含义。如果关闭它,它会将缓冲区“刷新”到磁盘上。

您可以使用writer.close()自行关闭它

或者你可以使用try-with-resources,它会自动关闭作者:

try (FileWriter fw = new FileWriter("C:\\IntelliJfiles\\write-to-file\\src\\pl\\sca\\file.txt");
     BufferedWriter bw = new BufferedWriter(fw)){
    bw.write("kal");
} catch (Exception e) {
    e.printStackTrace();
}

【讨论】:

    【解决方案2】:

    需要关闭writer,可以使用try-with-resources

    String str = "kal";
    
    // we can use try-with-resources from java 7
    try (BufferedWriter writer = new BufferedWriter(new FileWriter(FILENAME))) {
        writer.write(str);
    }
    
    System.out.println("Done");
    

    或者干脆加writer.close():

    writer.write(str);
    writer.close();
    

    【讨论】:

    • 一个小改进:捕获异常并不表示在所有情况下都丢失了文件。如果您对此“事件”感兴趣,您应该捕获FileNotFoundException,并捕获IOExceptions 以了解您在处理 io 时可能遇到的其他错误情况。此外,您可以将 catch 子句移动到内部 try 块。
    • @sn42 我刚刚复制了问题中的代码并对其进行了补充:)
    • @PeterSamokhin 当然这是解决原始问题的好答案。一个很好的答案是要么说明您提供的代码存在错误(失败的 IO 操作并不表示在所有情况下都没有文件),要么更改原始代码并解释为什么需要或需要进行这些更改。特别是对于从 Java 开始的开发人员,我猜这些建议会很有价值。仅供参考,这是一种改进,没有更正:)
    【解决方案3】:

    BufferWriter 的替代方法是 Files.write(Path, byte[], OpenOption...),如果您的目标是只写入一次文件。

    String str = "test";
    Path path = Paths.get("file.txt");
    
    try {
        byte[] bytes = str.getBytes(StandardsCharsets.UTF_8);
        Files.write(path, bytes);
    } catch (FileNotFoundException e) {
        // Handle file absence.
    } catch (IOException e) {
        // Handle other exceptions related to io.
    }
    

    注意:如前所述,here 捕获 Exception 并不表示在所有情况下都没有文件。如果您想处理文件缺失,请捕获 FileNotFoundException,或者对于与 io 相关的所有异常情况,请捕获 IOException

    【讨论】:

    • 感谢您的提及,认为 IOException 就足够了:)
    【解决方案4】:

    试试这个

    try {
                String str = "kal";
                BufferedWriter writer = new BufferedWriter(new 
                FileWriter(FILENAME));
                writer.write(str);
                writer.close();
                System.out.println("Done");
    
            }
    

    【讨论】:

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