【问题标题】:How to save file using JFileChooser in Java? [closed]如何在 Java 中使用 JFileChooser 保存文件? [关闭]
【发布时间】:2013-01-29 18:09:01
【问题描述】:

我有以下代码。它保存文件但内容为空。它有什么问题?

public void saveMap() {
    String sb = "TEST CONTENT";
    JFileChooser chooser = new JFileChooser();
    chooser.setCurrentDirectory(new File("/home/me/Documents"));
    int retrival = chooser.showSaveDialog(null);
    if (retrival == JFileChooser.APPROVE_OPTION) {
        try {
            FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt");
            fw.write(sb.toString());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

【问题讨论】:

    标签: java swing file-io jfilechooser


    【解决方案1】:

    如果您使用的是 Java 7,请对资源使用 try。你会这样做:

    try(FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt")) {
        fw.write(sb.toString());
    }
    

    Try with resources 在失败或成功时自动调用close()

    如果您不使用 Java 7,请不要忘记致电 close()close() 会自动调用flush()

    ...
    fw.close();
    ...
    

    要了解为什么需要刷新,您需要了解 FileWriter 的工作原理。当您说fw.write("blah") 时,它实际上将该字符串放入内存中的缓冲区中。填满缓冲区后,FileWriter 会将字符串写入硬盘驱动器。它具有这种行为是因为在大块中写入文件效率更高。

    如果你想在缓冲区达到容量之前清空缓冲区,你需要通过调用flush() 告诉 FileWriter。在通信时(例如通过 Internet)调用 flush() 也非常重要,因为您需要在另一端看到您的消息之前刷新。如果您的信息只是留在记忆中,它不会对他们有多大用处。

    完成任何 I/O 流后,您应该调用 close()(标准 I/O 流除外)。这意味着操作系统不再需要维护这个流。在某些情况下,可以打开的流数量有限,例如文件,所以不要忘记关闭是非常重要的。

    当您调用 close 时,它​​实际上做了两件事:清空缓冲区,然后关闭流。这是为了确保在流关闭之前不会留下任何东西。

    【讨论】:

      【解决方案2】:

      别忘了flushclose 你的FileWriter

      【讨论】:

      【解决方案3】:

      你需要close()你的 FileWriter。

      【讨论】:

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