Java堆空间程序性能

标签 java

我编写了一个Java程序,从txt文件中逐行读取,找到一行中的某个值,对其进行编辑并将所有行写入一个新文件。 例如:

Input:
4563,9876,abc545

Output:
4563,9876_1,abc545

我正在从命令提示符运行该程序,并且能够处理 100 万条记录。但如果我处理得更多一些,我会收到以下错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

我试图解决这个问题,但没有成功。 下面是我的 Java 类,我可以获得一些有关如何改进代码以处理更多记录的建议吗?

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

 class RecordTreatment {
    public static void main(String args[]) throws IOException
    {
                // Open the file
                File file = new File("C:\\Users\\tolen\\Desktop\\test.txt"); 
                FileInputStream fstream = new FileInputStream(file);
                BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
                StringBuilder fileContent = new StringBuilder();
                String strLine;
                int counter=1;
                //Read File Line By Line
                while ((strLine = br.readLine()) != null)   {
                    String tokens[] = strLine.split(",");
                    if (tokens.length > 0) {
                            String tokens1[] = tokens[16].split("\"");
                            tokens[16] ="\""+tokens1[1] + "_"+counter+++"\"";
                            for (int i = 0; i < tokens.length; i++) {
                                if ( tokens[i].equals(tokens[tokens.length-1])) {
                                    fileContent.append(tokens[i]);
                                }else{
                                    fileContent.append(tokens[i]+",");
                                  }
                                }
                            fileContent.append("\n");
                    }
                }
                FileWriter fstreamWrite = new FileWriter("C:\\Users\\tolen\\Desktop\\test1.txt");
                BufferedWriter out = new BufferedWriter(fstreamWrite);
                out.write(fileContent.toString());
                out.close();
                //Close the input stream
                br.close();
    }
}

最佳答案

class RecordTreatment {
    public static void main(String args[]) throws IOException
    {
        // Open the file
        File file = new File("C:\\Users\\tolen\\Desktop\\test.txt"); 
        FileInputStream fstream = new FileInputStream(file);
        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
        FileWriter fstreamWrite = new FileWriter("C:\\Users\\tolen\\Desktop\\test1.txt");
        BufferedWriter out = new BufferedWriter(fstreamWrite);

        String strLine;
        int counter=1;
        //Read File Line By Line
        while ((strLine = br.readLine()) != null)   {
            String tokens[] = strLine.split(",");
            if (tokens.length > 0) {
                String sub_tokens[] = tokens[16].split("\"");
                tokens[16] = String.format("\"{}_{}",sub_tokens[1],counter);
                out.write(String.join(",",tokens));
                out.write("\n");
            }
        }

        out.close();
        br.close();
    }
}

关于Java堆空间程序性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46266241/

相关文章:

java - 避免使用instanceof模式

java - Google Calendar Api - 将日期时间转换为日历对象

java - 在 Gridlayout Java Swing 中显示数组列表项

java - Android Java 读取和保存数据不起作用

JavaFX Web View : custom cursors not working?

java - 在spring bean中处理xml配置文档

java - 如何让客户端浏览器停止请求过期的 session ID?

java - 简单的 Spring MVC+安全设置

java - 参数错误的递归方法

java - 在 Struts2 中提交响应后无法调用 sendRedirect()