我是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();
}
}
答案 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()
。