如果大小大于~10MB,则无法读取整个文本文件

时间:2013-12-10 13:47:09

标签: java regex file text bufferedreader

我正在尝试逐行读取文本文件并使用正则表达式搜索特殊行。问题是我的文件大约是28MB。其中有198546行,但在大约110000行之后,我的脚本没有任何异常地搜索并完成脚本。我认为这与BufferedReader大小相关。

这是我的代码的一部分:

try {
    BufferedReader br = new BufferedReader(new FileReader(logsArrayList.get(i).toString()));
    String strLine;
    number = 0;
    while ((strLine = br.readLine()) != null) {
        if ((lineNumber % 2) == 0) {
            firstLine = strLine;
        }
        //control the regex 
        Matcher m = runRegex.matcher(strLine);
        if (((lineNumber % 2) != 0) && m.find()) {
            number++;
            stringList.add(number + ") " + firstLine);
            stringList.add(strLine);
            logList.add(logsArrayList.get(i).toString());
            logList.add(logsArrayList.get(i).toString());
        }
        publish(stringList.size());
        lineNumber++;
    }
        br.close();
} catch (Exception e) {
    System.err.println("Error: " + e.getMessage());
}

那么有没有人知道为什么我无法读取整个文件?它与BufferedReader大小有关,如果是,我该如何处理这个问题?

感谢任何帮助,想法或示例。

编辑:脚本不会抛出异常。

2 个答案:

答案 0 :(得分:1)

如果您对堆栈大小有任何问题,那么您应该增加堆大小

Just increase the heap size of Java

java -Xmx250m

If you running your project from IDE set -Xmx250m in arguments.

250m is 250mb

increasing vm size

答案 1 :(得分:0)

如果您使用的是Java 7,则可以这样做:

try (BufferedReader br = Files.newBufferedReader(Paths.get("path/to/your/file.txt"), StandardCharsets.UTF_8)) {
    for (String line = null; (line = br.readLine()) != null;) {
        //...
    }

}