java - 如何克服 PrintWriter 内存不足异常?

标签 java csv printwriter

以下代码读取一堆 .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/

相关文章:

java - 指定 PrintWriter 类 (Java) 的文件位置并自动附加 .txt

java - 推断在接口(interface)中使用默认方法使其像 Java 中的抽象类是否正确?

java - XML 模式创建需要很长时间

java - 当我设置背景图像时,我的按钮被隐藏

python - 仅打印/绘制 CSV 文件中某些特定站点的特定列

java - 如何使用 OpenCSV 将 bean 写入 CSV,而不转换为 String[]?

java - 如何在 Java 1.4 中为 BufferedReader 和 PrintWriter 设置超时?

java - 将 Spring Boot war 部署到 Jenkins 中

JSON 和 CSV 的 Python 编码问题

java - 使用 printwriter 创建一个包含列表中多行的文本文件