guava 文件 *** 作 文件行数

guava 文件 *** 作 文件行数,第1张

复制文件

//通过guava 实现文件复制

private static String from = "D:\\自定义代码\\Guava\\guava\\src\\1.txt"

private static String to = "D:\\自定义代码\\Guava\\guava\\src\\2.txt"

Files.copy(new File(from),new File(to))

//通过java NIO实现文件复制

java.nio.file.Files.copy(Paths.get(from),

Paths.get(to), StandardCopyOption.REPLACE_EXISTING)

2、移动文件

//to若存在,将被删除,重新生成

Files.move(new File(from),new File(to))

3、按山前锋行读取文件

//读取文件悔闭第一行

String configJson = Files.readFirstLine(file, Charsets.UTF_8)

//将文件每一行读到list里逗晌

List readLines = Files.readLines(file, Charsets.UTF_8)

//按照条件,将文件每行读到list里

Files.readLines(file, Charsets.UTF_8, new LineProcessor>() {

List list = new ArrayList()

@Override

public List getResult() {

return list

}

@Override

public boolean processLine(String arg0) throws IOException {

// TODO Auto-generated method stub

return false

}

})

4、计算文件hashcode (可对比两个文件是否一样)

//Hashing.md5()Hashing.sha256()

HashCode hash = Files.asByteSource(new File(to)).hash(Hashing.sha512())

读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法:

Files.readLines(new File(path), Charsets.UTF_8)FileUtils.readLines(new File(path))

这种方法带来的问题是文件的所有行都被存放在内存中,当文件足够大时很快就会导致程序抛出OutOfMemoryError 异常。

例如:读取一个大约1G的文件:

@Testpublic void givenUsingGuava_whenIteratingAFile_thenWorks() throws IOException {String path = ...Files.readLines(new File(path), Charsets.UTF_8)}

这种方式开始时只占用很少的内存:(大约消耗了0Mb内存)

[main] INFO org.baeldung.java.CoreJavaIoUnitTest - Total Memory: 128 Mb[main] INFO org.baeldung.java.CoreJavaIoUnitTest - Free Memory: 116 Mb

然而,当文件全部读到内存中后,我们最后可以看到(大约消耗了2GB内存):

[main] INFO org.baeldung.java.CoreJavaIoUnitTest - Total Memory: 2666 Mb[main] INFO org.baeldung.java.CoreJavaIoUnitTest - Free Memory: 490 Mb

这意味这一过程大约耗费了2.1GB的内存——原因很简单:现在文件的所有行都被培明猛存储在内存中。

把文件所有的内容都放在内存中很快会耗尽可用内存——不论实际可用内存有多大,这点是显而易见的。

此外,我们通常不需要把文件的所有行一次性地放入内存中——相反,我们只需要遍历文件的每一行,然后做相应的处理,处理完之后把它扔掉。所以,这正是我们将要做的——槐含通过行迭代,而不是把所有行都放在内存配桥中。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12224954.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存