请更正我的函数以将对象数组写入文件

时间:2014-05-08 20:57:03

标签: java arrays file function methods

很抱歉,如果这个问题非常愚蠢,但现在就去了。我正在创建一个函数/方法(有人可以告诉我哪个单词适合Java吗?)并希望有一些帮助将对象数组写入文件。下面是我当前的代码,结果是一个空白文本文件!请帮忙!

public static void writelines(Object[] data, String filename, String extension) {
    for (int i = 0; i < data.length; i++) {
        try {
            String fileid = filename + "." + extension;

            File file = new File(fileid);@SuppressWarnings("resource")
            PrintWriter writer = new PrintWriter(new FileWriter(file));
            writer.println(data[i]);
        } catch (IOException writeFail) {}
    }
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

由于您的文件创建发生在循环内,因此您将为每一行文本重新创建文件。您应该将代码重构为以下内容:

        try {
            String fileid = filename + "." + extension;

            File file = new File(fileid);
            @SuppressWarnings("resource")
            PrintWriter writer = new PrintWriter(new FileWriter(file));

            for (int i = 0; i < data.length; i++) {
                writer.println(data[i]);
            }
        }
        catch (IOException writeFail) {}

答案 1 :(得分:3)

每次尝试将某些内容写入文件时,您都在创建新的FileWriter。默认情况下,FileWriter构造函数会重置文件内容,因此这是您的第一个问题。要解决它,请在循环之前创建一次。

第二个问题是你没有关闭你的作家。因此,在完成将所有数据写入文件后

writer.close()

或甚至更好地使用try-with-resources自动为您关闭

try(PrintWriter writer = new PrintWriter(new FileWriter(new File(filename + "." + extension)))){
    for (int i = 0; i < data.length; i++) 
        writer.println(data[i]);
} catch (IOException e) {
    e.printStackTrace();
}

你的最后一个问题(好吧,也许不是实际问题,但非常糟糕的习惯)是你正在消耗异常。这段代码

catch (IOException writeFail) {}

将成为未来许多令人头疼的问题。 catch块的目的是处理不能避免的问题。如果您不知道如何解决它,那么至少打印一下它的信息,这样您就知道还有一些东西需要修复。所以在最坏的情况下使用

catch (IOException e) {
    e.printStackTrace();
}