0

我正在尝试从系统中导出一些文件并将其保存在我的驱动器中,问题是某些文件非常大,并且我得到了 java 内存不足错误。

FileOutputStream fileoutstream = new FileOutputStream(filenameExtension);
fileoutstream.write(dataManagement.getContent(0).getData());
fileoutstream.flush();
fileoutstream.close();

我可以尝试的任何建议,我添加了刷新但现在有所不同,这将调用导出方法,生成文件并保存。我正在使用游标来运行我导出的数据而不是数组,我尝试添加更多内存但文件太大。

4

3 回答 3

2

您在写入之前将整个文件加载到内存中。相反,您应该:

  1. 只加载一块数据
  2. 写下来
  3. 重复上述步骤,直到处理完所有数据。
于 2013-05-01T16:24:01.317 回答
1

如果文件真的很大,您可能需要分块读取/写入它们。如果文件足够大以适合内存,那么您可以增加虚拟机内存的大小。

IE:

java -Xmx512M ...


FileInputStream fi = infile;
FileOutputStream fo = outfile
byte[] buffer = new byte[5000];
int n;
while((n = fi.read(buffer)) > 0)
    fo.write(b, 0, n);

希望这有助于理解。

于 2013-05-01T16:23:44.470 回答
0

您可以使用spring批处理框架来读取和写入块大小的文件。 http://static.springsource.org/spring-batch/

于 2013-05-01T16:36:46.410 回答