【问题标题】:writing to a file problem [duplicate]写入文件问题[重复]
【发布时间】:2010-08-18 13:28:11
【问题描述】:

我正在使用此代码写入 java 中的文件。它一直有效,我 100% 确定它是正确的。但是文件仍然没有被写入。 我什至没有收到错误。

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

public class writetofile {

    public static void main(String [] args){

        FileWriter fw;

        try {
            fw = new FileWriter("testfile.txt");

            BufferedWriter bw = new BufferedWriter(fw);

            bw.write("this is test");

            bw.write("this is test");
            bw.write("this is test");


        } catch (IOException e) {

            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

会不会是其他问题?

【问题讨论】:

  • 永远不要 100% 确定,但要 100% 好奇 ;)

标签: java file-io


【解决方案1】:

您没有在 BufferedWriter 对象上调用 close() 方法。这意味着缓冲区永远不会被刷新。在您最后的 bw.write() 语句之后添加 bw.close()

【讨论】:

  • 非常感谢!我不知道我是多么想念它!超级愚蠢!对不起!
  • @jillika:我相信每个 Java 程序员都遇到过这种情况,而且不止一次。
【解决方案2】:

试试fw.flush()fw.close()

【讨论】:

  • +1: ...但是bw.close() 会自动调用bw.flush(),所以你可以直接调用close。
  • 非常感谢!我不敢相信我会这样做:P
  • :) 总是匆忙发生
  • 应该是bw.flush()和bw.close(),调用fw函数不会刷新bufferedWriter
【解决方案3】:

您需要刷新缓冲区并关闭文件:

try {
            fw = new FileWriter("/tmp/testfile.txt");
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write("this is test");
            bw.write("this is test");
            bw.write("this is test");
            bw.flush();
            fw.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

您还应该从文件关闭中单独处理实际文件写入中的 IOException,这样您就不会在最后打开文件描述符:

    FileWriter fw = null;
    try {
        fw = new FileWriter("/tmp/testfile.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write("this is test");
        bw.write("this is test");
        bw.write("this is test");
        bw.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (fw != null) {
                fw.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

【讨论】:

  • +1,目前唯一提到关闭finally的人,正确的方式。请注意,flush() 仍然是不必要的,因为 close() 隐含地这样做了。但这并没有什么坏处。在特殊情况下不关闭finally 可能会造成更大的伤害。
【解决方案4】:

确保在方法退出之前调用bw.close()。如果缓冲区没有被刷新,您的文件将不会被写入。

【讨论】:

    【解决方案5】:

    尝试使用sw.close() 关闭流,否则数据可能仍会被缓存而实际上并未写入磁盘。

    【讨论】:

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