很抱歉,如果这个问题非常愚蠢,但现在就去了。我正在创建一个函数/方法(有人可以告诉我哪个单词适合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) {}
}
}
我该如何解决这个问题?
答案 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();
}