【发布时间】:2021-03-13 08:47:34
【问题描述】:
所以我的想法是我需要阅读这个 .json 文件。 它太大了,我什至无法使用记事本或 Visual Studio 代码打开它。
我试过这个:
BufferedReader in = new BufferedReader(new FileReader("path to the file"));
String line = in.readLine();
我得到这个错误:
线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间 在 java.base/java.util.Arrays.copyOf(Arrays.java:3536) 在 java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:228) 在 java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:735) 在 java.base/java.lang.StringBuilder.append(StringBuilder.java:227) 在 java.base/java.io.BufferedReader.readLine(BufferedReader.java:372) 在 java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) 在 com.ReadJSON.TagValues.listFilesForFolder(TagValues.java:133) 在 com.ReadJSON.TagValues.listFilesForFolder(TagValues.java:129) 在 com.ReadJSON.TagValues.listFilesForFolder(TagValues.java:129) 在 com.ReadJSON.TagValues.listFilesForFolder(TagValues.java:129) 在 com.ReadJSON.Main.main(Main.java:18)
我在互联网上搜索了一些解决方案是更改内存设置,但它不起作用,它返回相同的错误。 另一个问题是整个文件是ONELINE。文件的全部内容写在一行中。 我想我必须在某个时间打破该行的读取部分,这样它就不会超过分配的最大内存,存储该值并从我离开的地方再次开始读取。一遍又一遍地这样做,直到行尾。
我应该如何阅读这个文件有什么建议吗?我应该尝试不同的方式来阅读它还是有什么技巧可以打破 readLine()?
谢谢!
【问题讨论】:
-
增加内存的解决方案,小文件可以接受,大文件不行。对于大文件,您将需要使用 Stream,并逐块读取文件。