我有一个大数据文件,比如 dataset.txt,其中数据的格式是 -
1683492079 kyra maharashtra 18/04/2017 10:16:17
1644073389 pam delhi 18/04/2017 10:16:17
.......
Run Code Online (Sandbox Code Playgroud)
这些字段是 id、名称、状态和时间戳。
我在 .txt 数据文件中有大约 50,000 行数据。
我的要求是以 10 的批量大小从此数据文件中读取数据。
所以在第一批中,我需要从 0 到第 9 个元素读取。下一批从第 10 个到第 19 个元素等等......
使用 BufferedReader 我设法读取了整个文件:
import java.io.*;
public class ReadDataFile {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("dataset.txt"));
String line;
while((line = br.readLine())!= null)
{
System.out.println(line);
}
br.close();
}
}
Run Code Online (Sandbox Code Playgroud)
但我的要求是以 10 的批处理大小读取文件。我是 Java 新手,所以如果有人能简单地帮助我,我将不胜感激。
根据@GhostCat 的回答——这就是我所得到的——
public class ReadDataFile {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("dataSetExample.txt"));
readBatch(br,10);
}
public static void readBatch(BufferedReader reader, int batchSize) throws IOException {
List<String> result = new ArrayList<>();
for (int i = 0; i < batchSize; i++) {
String line = reader.readLine();
if (line != null) {
// result.add(line);
System.out.println(line);
}
}
// return result;
return ;
}
}
Run Code Online (Sandbox Code Playgroud)
该文件是在 readBatch 方法中读取的,那么我如何在 main 方法中知道到达文件末尾以调用接下来的 10 条记录?请帮忙。
你的要求不是很清楚;但一些简单的事情可以让你开始:
A)你的主要方法不应该做任何阅读;它只是准备那个 BufferedReader 对象
B)您使用该阅读器的方法如下:
private static List<String> readBatch(Reader reader, int batchSize) throws IOException {
List<String> result = new ArrayList<>();
for (int i = 0; i < batchSize; i++) {
String line = reader.readLine();
if (line != null) {
result.add(line);
} else {
return result;
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
用于您的主要:
BufferedReader reader = ...
int batchSize = 10;
boolean moreLines = true;
while (moreLines) {
List<String> batch = readBatch(reader, batchSize);
... do something with that list
if (batch.size() < batchSize) {
moreLines = false;
}
Run Code Online (Sandbox Code Playgroud)
这意味着“建议”您如何处理此问题。我的答案中缺少的东西:可能你应该使用一个不同的类,并在那里进行解析(并返回一个List<DataClass>而不是在那些原始的“行串”周围移动。
当然:50000 行并不是真正的数据。除非我们谈论的是嵌入式设备,否则关于“批处理风格”真的没有什么意义。
最后:术语批处理具有非常独特的含义;也是在 Java 中,如果您打算去那里,请参阅此处以进一步阅读。