commons.io 的FileUtils的readLines在处理小文件还行,在处理大文件,内存占用就非常大,应该改用 FileUtils.lineIterator,读取指
定数目,再进一步处理
例子如下
之前使用:
List<String> lines = FileUtils.readLines(file, StandardCharsets.UTF_8);
现在改成
final int pagesize = 1000;
List<BillWeixin> billList = new ArrayList<>(pagesize);
try (LineIterator it = FileUtils.lineIterator(file, "UTF-8")) {
while (it.hasNext()) {
String line = it.nextLine();
BillWeixin bill = toBillWeixin(line, titles, billdate);
if (bill != null) {
billList.add(bill);
}
// 账单大于一页
if (billList.size() >= pagesize) {
saveData(billList, date);
// 清空
billList.clear();
}
}
}
}
// 最后把剩下的数据再存起来
saveData(billList, date);
里头使用JDK1.7的try with resource 语法,注意使用,这样大大减少内存占用