什么';用java编写大型文本文件最有效的方法是什么?

什么';用java编写大型文本文件最有效的方法是什么?,java,file-io,heap,out-of-memory,Java,File Io,Heap,Out Of Memory,我正在尝试使用以下方法编写包含一定数量数据的文件: public static <T extends SomeClass> void writeFile(String buffer, Class<T> clazz, int fileNumber) { String fileType = ".txt"; File file = new File(clazz.getName()+fileNumber+fileType); PrintWriter pri

我正在尝试使用以下方法编写包含一定数量数据的文件:

public static <T extends SomeClass> void writeFile(String buffer, Class<T> clazz, int fileNumber) {
    String fileType = ".txt";
    File file = new File(clazz.getName()+fileNumber+fileType);
    PrintWriter printWriter = null;


    try {
        FileWriter writer = new FileWriter(file);
        printWriter = new PrintWriter(writer);
        printWriter.print(buffer);//error occurs here
        printWriter.flush();
        printWriter.close();
        System.out.println("created file: "+file.getName());


    } catch (IOException e) {
        e.printStackTrace();
    } finally{
        if(printWriter!=null){
            printWriter.flush();
            printWriter.close();
        }
    }
    System.out.println("Done!");
}
publicstaticvoidwritefile(字符串缓冲区、类clazz、int文件号){
字符串fileType=“.txt”;
File File=新文件(clazz.getName()+文件号+文件类型);
PrintWriter PrintWriter=null;
试一试{
FileWriter writer=新的FileWriter(文件);
printWriter=新的printWriter(writer);
printWriter.print(缓冲区);//此处发生错误
printWriter.flush();
printWriter.close();
System.out.println(“创建的文件:+file.getName());
}捕获(IOE异常){
e、 printStackTrace();
}最后{
如果(printWriter!=null){
printWriter.flush();
printWriter.close();
}
}
System.out.println(“完成!”);
}
缓冲区字符串包含+-6mb的数据,当我运行代码时,我在缓冲区中得到一个java.lang.OutOfMemoryError

既然6mb不是那么多“数据”,我认为您应该增加java虚拟机内存

看看这里


替换
printWriter.print(缓冲区)怎么样带有:

for (int i = 0; i < buffer.length; i += 100) {
    int end = i + 100;

    if (end >= buffer.length) {
        end = buffer.length;
    }

    printWriter.print(buffer.substring(i, end);
    printWriter.flush();
}
for(int i=0;i=缓冲区长度){
结束=缓冲区长度;
}
printWriter.print(缓冲区子字符串(i,end);
printWriter.flush();
}

您是否使用-Xmx命令行选项为Java虚拟机提供了合理的内存?您是否尝试过用较小的块而不是单个调用来编写缓冲区?顺便说一句,我相信PrintWriter.write使用内存的原因是它将整个字符串编码为字节数组,然后再写入。程序员现在就是我们“我同意你的看法,但平衡意味着以正确的方式最大限度地利用你所拥有的资源。”(平衡意味着以正确的方式使用适当数量的资源。