以下代码读取一堆 .csv 文件,然后将它们组合成一个 .csv 文件。我尝试 system.out.println
...所有数据点都是正确的,但是当我尝试使用 PrintWriter
时,我得到:
线程“main”java.lang.OutOfMemoryError 中出现异常:Java 堆空间
。
我尝试使用FileWriter
但遇到了同样的错误。我应该如何更正我的代码?
public class CombineCsv {
public static void main(String[] args) throws IOException {
PrintWriter output = new PrintWriter("C:\\User\\result.csv");
final File file = new File("C:\\Users\\is");
int i = 0;
for (final File child: file.listFiles()) {
BufferedReader CSVFile = new BufferedReader( new FileReader( "C:\\Users\\is\\"+child.getName()));
String dataRow = CSVFile.readLine();
while (dataRow != null) {
String[] dataArray = dataRow.split(",");
for (String item:dataArray) {
System.out.println(item + "\t");
output.append(item+","+child.getName().replaceAll(".csv", "")+",");
i++;
}
dataRow = CSVFile.readLine(); // Read next line of data.
} // Close the file once all data has been read.
CSVFile.close();
}
output.close();
System.out.println(i);
}
}
最佳答案
我只能想到该代码可能导致 OOME 的两种情况:
如果
file
目录包含大量元素,则file.listFiles()
可能会创建一个非常大的File< 数组
对象。如果其中一个输入文件包含很长的一行,则
CSVFile.readLine()
在读取该文件的过程中可能会使用大量内存。 (最多为行中字节数的 6 倍。)
解决这两个问题的最简单方法是使用 -Xmx
JVM 选项增加 Java 堆大小。
我看不出您使用 PrintWriter
会导致问题的原因。
关于java - 如何克服 PrintWriter 内存不足异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19298163/