我想分塊文本文件(可以說,一個日誌文件),只選擇一定的編號。 (可以說,我們正在將日誌文件拆分爲更小的文件)。我寫了這個代碼在命令行式風格:使用Java 8流分塊文本文件
package utils;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.function.Consumer;
public class FileUtils {
public static void main(String[] args) {
readFileInChunks("D:\\demo.txt", 10000, System.out::println);
}
public static void readFileInChunks(String filePath, int chunkSize, Consumer<StringBuilder> processor) {
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
StringBuilder lines = new StringBuilder();
String line, firstLine = null;
int i;
for (i = 0; (line = br.readLine()) != null; i++) {
if (firstLine == null)
firstLine = line;
lines.append(line + "\n");
if ((i + 1) % chunkSize == 0) {
processor.accept(lines);
lines = new StringBuilder(firstLine + "\n");
}
}
if (lines.toString() != "") {
processor.accept(lines);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
這些年來,我花了迭代式的編碼,我不能拿出基於Java的8流功能的風格此方法的實現。
是否有可能使readFileInChunks
方法返回大塊的Stream<String>
?或者,以功能性的方式實施readFileInChunks
?
你並不需要調用'br.close()'手動在聲明'br'內'try(...)'語句。這是語言功能的全部目的。 – Holger