在java中读取大文件的最快方法

时间:2013-10-09 19:38:17

标签: java

逐行读取大文件(文件包含1.000.000行)并解析java中的某些行的最快方法是什么?例如,这是我文件的一个片段

INFO  00:02:12 - returning228885634                                                              
INFO  00:02:12 - Step is 1 for 228885634 statusOK duration 0.018               
INFO  00:02:12 - Step is 2 for 228885634 statusOK duration 1.55                            
INFO  00:02:13 - START executing FOR  test32967 at Mon Sep 23 00:02:13 GMT+00:00 2013       
INFO  00:02:13 - Currently working 7

我只想从这个片段中解析测试的id(32967)!

5 个答案:

答案 0 :(得分:3)

您可以尝试这样: -

try (SeekableByteChannel bytechanel= Files.newByteChannel(Paths.get("abc.txt"))) {
    ByteBuffer byte1 = ByteBuffer.allocateDirect(1000);
    for(;;) {
        StringBuilder s = new StringBuilder();
        int n = bytechanel.read(byte1);
        // some code
    }
}

同时寻找 java.nio.* 套餐

答案 1 :(得分:1)

对于像这样的事情,很难打败BufferedReader

try {
  BufferedReader reader = new BufferedReader(new FileReader(file));
  String line = null;
  while ((line = reader.readLine()) != null) {
    //do something with line
  }
} finally {
  try {
    reader.close();
  } catch (IOException e) {
  }
}

答案 2 :(得分:1)

使用Guava的Files.readLines()方法,您可以为其提供LineProcessor

Files.readLines(new File("a_file.ext"), Charsets.UTF_8, new LineProcessor<String>() {

    @Override
    public boolean processLine(String line) throws IOException {
        return line.contains("some identifier");
    }

    @Override
    public String getResult() { // the @tring here is the generic type of LineProcessor, change it to whatever
        //create a result, get your id or ids
        return "";
    }
});

答案 3 :(得分:0)

要处理大型文件,您可以利用新java包中的类来处理IO nio包提供各种机制来管理这种类型的文件,具有相当的性能。

请参阅http://docs.oracle.com/javase/7/docs/api/java/nio/channels/package-summary.html

答案 4 :(得分:0)

如果您使用的是Java 8,则可以使用“文件和流”类来尝试此操作。

例如:

Files.newBufferedReader(Paths.get("somefile")).lines().map((t)-> r).collect(Collectors.toList());

还会查找来自java.nio.files

java.nio.*和其他类