В то время как цикл для создания нескольких файлов
Я пытаюсь сделать приложение Java, которое будет принимать массовый файл с несколькими сообщениями, а затем разделить их и записать каждое сообщение в собственный файл. Проблема, с которой я сталкиваюсь, заключается в том, что она только создает файл с последним сообщением внутри, поэтому я думаю, что он переписывается для каждой итерации цикла while. Мой код ниже:
public void writeFile(StringBuilder contents, String outputFilePath) throws IOException {
String messages = contents.toString();
StringTokenizer st = new StringTokenizer(messages, "$");
FileWriter fileWriter = null;
BufferedWriter bufferedFileWriter = null;
while (st.hasMoreTokens()) {
int i = 0;
i++;
File output = new File(outputFilePath + "_" + i + ".txt");
try {
fileWriter = new FileWriter(output);
bufferedFileWriter = new BufferedWriter(fileWriter);
bufferedFileWriter.append(st.nextToken());
}
finally {
if (bufferedFileWriter != null) {
bufferedFileWriter.close();
}
if (fileWriter != null) {
fileWriter.close();
}
}
}
}
переместите объявление i
:
int i = 0;
вне в while
цикла:
int i = 0;
while(st.hasMoreTokens(){
...
}
Таким образом, вы не переписываете его для каждой итерации. Оставляя это всегда со значением 1
.
Еще лучший подход - использовать for
:
for(int i = 1; st.hasMoreTokens(); i++){
...
}
Который оставляет вас с хорошо знакомой переменной i
доступной только внутри цикла
Вы можете использовать try-with-resource и i
во внешнем цикле для упрощения кода.
public void writeFile(StringBuilder contents, String outputFilePath) throws IOException {
StringTokenizer st = new StringTokenizer(contents.toString(), "$");
for (int i = 0; st.hasMoreTokens(); i++) {
File output = new File(outputFilePath + "_" + i + ".txt");
try(FileWriter fileWriter = new FileWriter(output)) {
fileWriter.append(st.nextToken());
}
}
}
- Вопросы
- Stringtokenizer
- В то время как цикл для создания нескольких файлов