while循环创建多个文件
While loop to create multiple files
我正在尝试制作一个 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());
}
}
}
我正在尝试制作一个 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());
}
}
}