当我运行此命令时,即使ArrayList哈希具有多个值,也仅将一行写入文件。
我尝试删除fileWriter.close,但随后没有任何内容写入文件。
for (int i = 0; i < hash.size(); i++) {
String fileContent = hash.get(i);
FileWriter fileWriter;
try {
fileWriter = new FileWriter(OutputPath);
fileWriter.write(fileContent);
fileWriter.write("/n");
fileWriter.close();
} catch (IOException ex) {
Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex);
}
}
我希望将数组的每个值写入文件中自己的行中。
答案 0 :(得分:2)
您正在不断打开和关闭文件;您应该在循环之前将其打开一次(然后在循环之后将其关闭)。但是,如果您使用try-with-Resources
close statement(我会首选 ),则根本不需要手动关闭文件。换行符是\n
(但这也是特定于操作系统的),因此我将使用System.lineSeparator()
。最后,这里没有理由使用显式数组索引,因此我将使用for-each
loop。喜欢,
try (FileWriter fileWriter = new FileWriter(OutputPath)) {
for (String fileContent : hash) {
fileWriter.write(fileContent);
fileWriter.write(System.lineSeparator());
}
} catch (IOException ex) {
Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex);
}
答案 1 :(得分:1)
那是因为您一直在覆盖同一文件。每次执行循环的一次迭代时,都会打开文件并覆盖其内容。
在打开和关闭文件之间的try / catch中移动for
循环,如下所示:
FileWriter fileWriter;
try {
// open the file once
fileWriter = new FileWriter(OutputPath);
// loop through your items, writing each one to the file
for (int i = 0; i < hash.size(); i++) {
String fileContent = hash.get(i);
fileWriter.write(fileContent);
fileWriter.write("/n");
}
// close the file once
fileWriter.close();
} catch (IOException ex) {
Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex);
}
答案 2 :(得分:0)
使用fileWriter = new FileWriter(OutputPath, true);
。这将使true为true。因此,您的文件内容不会在for循环中被覆盖
或将fileWriter = new FileWriter(OutputPath);
从for loop
移出
答案 3 :(得分:0)
执行for循环,并且每次您覆盖文件内容时。
打开文件流时,应使用附加模式。否则,您将覆盖所有行。