将.txt文件转换为一个.csv.导出的信息将覆盖第一行.有什么提示吗?



我一直在做一个项目,从多个.txt文件中读取数据,将其转换为.csv文件。 我的问题是导出的数据不断覆盖第一行,因此每次导出文件时,它只显示最后一行。有人有任何提示可以帮助我吗?

//Reading the information from the files.
for (String fileName : textFileNames) {
try (Scanner sc = new Scanner(new File(stack + "\" + fileName));) {
fileIn = sc.nextLine();
while (fileIn != null) {
String line = fileIn;
String[] split = line.split("\s+");
StringJoiner joiner = new StringJoiner(",");
for (String strVal : split) {
joiner.add(strVal);
}
line = joiner.toString();
line = line.startsWith(",") ? line.substring(1) : line;
System.out.println(line);
BufferedWriter br = new BufferedWriter(new FileWriter("myfile.csv"));
StringBuilder sb = new StringBuilder();
// Append strings from array
sb.append(line);
sb.append("n");

br.write(sb.toString());
br.close(); 
fileIn = sc.nextLine();
} 

sc.close();
} catch (IOException ex) {
Logger.getLogger(Class_Organizer_Krause.class.getName())
.log(Level.SEVERE, null, ex);
}
}

您将在while 循环中重新创建BufferedWriter,实质上是在每次循环到输入文件中的新行时重新创建文件。

将 BufferedWriter 的构造移出 while 循环(就在它之前(,将 close 语句移到 while 循环之后,它应该没问题。

BufferedWriter br = new BufferedWriter(new FileWriter("myfile.csv", true));应该可以解决你的问题。

这是文档

顺便说一下,您应该将这些资源创建移动到tryhttps://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html 内,以避免在发生异常时拥有未关闭的资源

try (Scanner sc = new Scanner(new File(stack + "\" + fileName));
FileWriter fw = new FileWriter("myfile.csv", true);
BufferedWriter br = new BufferedWriter(fw);
) {
...
// you can remove br.close(); 
}

最新更新