Кажется, цикл for не выполняется - PullRequest
1 голос
/ 03 июня 2019

Когда я запускаю это, в файл записывается только одна строка, даже если хэш 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 ]

2 голосов
/ 03 июня 2019

Вы постоянно открываете и закрываете файл; Вы должны открыть его один раз перед циклом (и закрыть его один раз после). Однако нет необходимости закрывать файл вручную, если вы используете оператор try-with-Resources close (это то, что я бы предпочел ). И новая строка \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 голос
/ 03 июня 2019

Это потому, что вы продолжаете перезаписывать один и тот же файл. Каждый раз, когда вы выполняете одну итерацию цикла, вы открываете файл и перезаписываете его содержимое.

Переместите ваш for цикл внутри try / catch между открытием и закрытием файла следующим образом:

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);
}
0 голосов
/ 03 июня 2019

Цикл for выполняется, и каждый раз, когда вы перезаписываете содержимое файла.

Вы должны использовать режим добавления при открытии потока файла.В противном случае вы перезапишете все строки.

0 голосов
/ 03 июня 2019

используйте fileWriter = new FileWriter(OutputPath, true);.Это сделает добавление к истине.Таким образом, содержимое вашего файла не будет переопределено в цикле for

и не будет перемещать fileWriter = new FileWriter(OutputPath); из for loop

...