有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我对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) 个答案

  1. # 1 楼答案

    试试这个:

    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 2PathAPI,而不是旧的FileAPI

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

    • 收集^{中的一批行

    • 调用process(List<String> batch)方法进行处理

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