如何使用java代码批量读取文件内容

时间:2017-09-15 15:08:25

标签: java file

我是java编程的新手。我需要以较小的块读取一个巨大的java文件。例如 如果我有如下文件

a
b
c
d
e
f
g
h

我的批量大小为2.根据上面的文件,我需要创建4个批次然后处理。我不需要在此任务中使用多线程模式。 以下是我的尝试。我知道这很简单,我已经接近我想要实现的目标了。 对代码的任何建议都会有所帮助

public class testing {
public static void main(String[] args) throws IOException {
    System.out.println("This is for testing");
    FileReader fr = null;
    try {
        fr = new FileReader("C:\\Users\\me\\Desktop\\Files.txt");
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    int batchSize=2;
    int batchCount=0;
    int lineIncr=0;
    BufferedReader bfr = new BufferedReader(fr);
    String line;
    int nextBatch=0;
    int i=0;
    while((line=bfr.readLine())!= null) {
        if (lineIncr <=nextBatch ) {
            System.out.println(line);
            int b=0;
            i=i+1;
            if (i==2) {
                b=b+1;
                System.out.println("batchSize : "+b);
System.out.println("batchSize : "+b);
            }
        }

    }   
    bfr.close();
}
}

1 个答案:

答案 0 :(得分:2)

试试这个:

final int batchSize = 2;
Path file = Paths.get("C:\\Users\\me\\Desktop\\Files.txt");

try (BufferedReader bfr = Files.newBufferedReader(file)) {
    List<String> batch = new ArrayList<>(batchSize);
    for (String line; (line = bfr.readLine()) != null; ) {
        batch.add(line);
        if (batch.size() == batchSize) {
            process(batch);
            batch = new ArrayList<>(batchSize); // or: batch.clear()
        }
    }
    if (! batch.isEmpty()) {
        process(batch);
    }
}

显着特征:

  • 使用新的NIO 2 Path API,而不是旧的File API。

  • 使用try-with-resources确保Reader始终正确关闭。

  • 收集List<String>

  • 中的一批行
  • 调用process(List<String> batch)方法进行处理。

  • 如果最后一批不完整,请使用部分批次调用process()