趣文网 > 作文大全

会用Java读取文本文件就够了吗?文件超大怎么办?

2020-12-02 04:25:01
相关推荐

Java读取文本文件的几个方法。

读到内存(适合小文件)

Guava方法:

Files.readLines(new File(path), Charsets.UTF_8);Apache Commons IO方法:

FileUtils.readLines(new File(path));这种方法的问题在于所有内容都保留在内存中。如果文件太大,这将迅速导致OutOfMemory错误。

此外,通常我们并不需要把一个大文件一次性全部读出来。 一方面,我们可能会对文件逐行做处理;一方面即便是直接显示也会分段呈现。想象一下,一次性给前端(不管是web还是桌面)返回1G的数据,怎么显示?

文件流Scanner

try(Scanner scanner = new Scanner(new File(pathname))) { while ( scanner.hasNextLine() ) { String line = scanner.nextLine(); // 逐行处理 }}Apache Commons IO的Stream

LineIterator it = FileUtils.lineIterator(theFile, "UTF-8");try { while (it.hasNext()) { String line = it.nextLine(); // 逐行处理 }} finally { LineIterator.closeQuietly(it);}Java8的Stream

Files.lines(Paths.get(pathname)); 利用Files.lines()得到一个Stream,然后逐行处理。

进阶

读取文件总行数// 总行数long lineCount = Files.lines(Paths.get(pathname)).count();读取指定行或起止行try (Stream lines = Files.lines(path)) { List list = lines.skip( 1000 ).limit(10).collect(Collectors.toList());} catch (IOException e) { e.printStackTrace();} 如上,读取1001行到1010行。

利用上面这两段代码,可以用类似分页的方式来读取整个文件。

总页数 = 总行数 / 每页条数 + (总行数 % 每页条数 == 0 ? 0 : 1);每页内容 = lines.skip( (第几页-1)*每页条数 ).limit(每页条数);

阅读剩余内容
网友评论
相关内容
延伸阅读
小编推荐

大家都在看

小小发明家作文 哈尔滨旅游作文 大年夜作文 搞笑作文笑死人 握手作文600字 五年级下册优秀作文 观察作文400字四年级 元宵节的作文400字 六年级优秀作文600字 小学生作文过年 写一篇过年的作文 元宵节100字作文 写人作文600字初一 过年作文150字 家法打屁股作文 关于大扫除的作文 打扫卫生作文400字 我的弟弟作文600字 我心灵的甘露作文 逛街作文400字 原来作文 什么的我作文400字 打女孩屁股作文 我也了不起作文 写人的作文700字 我的家人作文500字 听见你的声音 作文 描写公园美景的作文 描写家乡美景的作文 关于仙人掌的作文