使用java读取文件的最有效方法是什么?

时间:2017-04-25 14:16:49

标签: java

我有一个包含1亿条记录的文本文件。我使用非常古老的方式来读取文件,但由于内存不足问题需要很长时间而无法完成。如果你能推荐使用java或使用任何外部库来读取文件的最佳和最佳方式,我真的很感激。(终极解决方案应该减少耗时)这是我的代码,如上所述,

BufferedReader reader = null;

    List<String> fileLines = new ArrayList<String>();
    String line = "";
    reader = new BufferedReader(new java.io.FileReader(file));
    while ((line = reader.readLine()) != null) {
        fileLines.add(line);
    }
    reader.close();
    return fileLines;

也用另一种方式但结果相同。

 public static void fileReading(File file, Object executingClass, String methodName, int size) throws IOException {
    try {
        Method method = executingClass.getClass().getMethod(methodName, List.class);

        BufferedReader reader = null;

        List<String> fileLines = new ArrayList<String>();
        String line = "";
        reader = new BufferedReader(new java.io.FileReader(file));
        int track = 0;
        while ((line = reader.readLine()) != null) {
            track++;
            fileLines.add(line);

            if (0 == track % size) {
                method.invoke(executingClass, fileLines);
                fileLines.clear();
            }
        }

        if (!fileLines.isEmpty()) {
            method.invoke(executingClass, fileLines);
            fileLines.clear();
        }

        reader.close();


    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:1)

您有两种选择:

1 - 最好不要读取整个文件并将其存储在内存中。只需读取一行(或表示条目的一组行),处理它,然后对文件中的所有行重复它。

2 - 如果你真的需要将整个文件存储在内存中,请尝试增加JVM堆的大小。

答案 1 :(得分:-1)

尝试通过传递以下参数来扩大分配给JVM的内存:

-Xms=3000m -Xmx=5000m

m表示MiB。您也可以将g用于GiB。

http://www.rgagnon.com/javadetails/java-0131.html