Java 如何使用PrintWriter克服内存不足异常?
下面的代码读取一组.csv文件,然后将它们组合成一个.csv文件。我试图Java 如何使用PrintWriter克服内存不足异常?,java,csv,printwriter,Java,Csv,Printwriter,下面的代码读取一组.csv文件,然后将它们组合成一个.csv文件。我试图系统.out.println。。。所有数据点都是正确的,但是当我尝试使用PrintWriter时,我得到: 线程“main”java.lang.OutOfMemoryError中出现异常:java堆空间 我试图使用FileWriter,但得到了相同的错误。我应该如何更正代码 public class CombineCsv { public static void main(String[] args) throws
系统.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:
- 如果
目录包含大量元素,则文件
可以创建一个非常大的文件.listFiles()
对象数组文件
- 如果其中一个输入文件包含非常长的行,则
在读取过程中可能会占用大量内存。(最多为行中字节数的6倍。)CSVFile.readLine()
-Xmx
JVM选项增加Java堆大小
我看不出为什么使用
PrintWriter
会导致问题。试试看
boolean autoFlush=true;
PrintWriter输出=新的PrintWriter(myFileName,自动刷新)代码>
它创建了一个PrintWriter实例,每当有新行或新格式时,它都会刷新内容。谢谢您的回复。文件数量为18个。每个文件包含30000条记录(约500KB)。18个文件不应该引起问题。记录的数量也不是问题所在。我的理论是,问题在于,您正在读取的一个文件包含一条很长的行。尝试找出OOME发生时正在读取的文件,然后将其缩小到该文件中的一行。