我有一个程序,应该将一些数据写入文件,它没有,我不知道为什么

时间:2013-01-07 16:56:01

标签: java file-io

我有一个简单的程序需要使用FileWriterBufferedWriter将几行字符串写入文件。它已经从文件中读取(在这种情况下)完全相同的数据,它将它存储在运行时内存中,但它完全拒绝写入它,我不知道为什么。通常我会尝试调试它,看看发生了什么,但我不知道我在寻找什么。

这是我的代码:

public void close () {
    FileWriter output = null;
    BufferedWriter fileOut = null;

    // I use the exact same method to read from file so this should work
    // this.prajituri :: ArrayList
    // toString is @Override

    try {
        output = new FileWriter(this.fileName);
        fileOut = new BufferedWriter(output);

        for (int i = 0; i < this.prajituri.size(); i++) {
            fileOut.write(prajituri.get(i).toString());
            System.out.println(prajituri.get(i).toString());
            fileOut.newLine();
        }
    } catch (IOException ioe) {
        System.out.println("Output error: " + ioe);
    } finally {
        if (fileOut != null)
            fileOut = null;
        if (output != null)
            output = null;
    }
}

以防万一,这是我的toString:

@Override
public String toString () {
    return this.name + ";" + this.weight + ";" + this.price;
}

每次我尝试写入文件时,它都会给我一个空文件。我做错了吗?

我检查了this.prajituri实际上是好的(它应该拥有所有数据) 我使用System.out.println(prajituri.get(i).toString())来检查应该写什么,也没问题。但它没有写任何东西。

4 个答案:

答案 0 :(得分:4)

您必须关闭 BufferedWriter fileOut.close()

答案 1 :(得分:2)

您需要刷新流以将其写入磁盘。

flush in java.io.FileWriter

你应该通过调用fileout.close()来正确关闭流(无论如何都会在内部调用flush)。

答案 2 :(得分:2)

立即写入磁盘:

output.flush();

完成后:

output.close();

close( )包括flush( )

答案 3 :(得分:1)

您必须刷新/关闭您的信息流。如果您使用的是Java SE 7,最简单的方法是使用新的自动资源管理功能:

http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html