For循环似乎没有执行

时间:2019-06-03 04:07:12

标签: java for-loop try-catch filewriter

当我运行此命令时,即使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);
    }
}

我希望将数组的每个值写入文件中自己的行中。

4 个答案:

答案 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循环,并且每次您覆盖文件内容时。

打开文件流时,应使用附加模式。否则,您将覆盖所有行。