Guava-File文件操作

guava-file文件操作

今天看guava的file时看到了一个功能是创建临时文件夹,于是就多看了一些其他的关于file的操作API。

一. Guava的文件写入

Guava的Files类中提供了几个write方法来简化向文件中写入内容的操作,下面的例子演示 Files.write(byte[],File)的用法。

import static com.google.common.base.Preconditions.*;
import static java.lang.System.*;
import com.google.common.base.Charsets;
import com.google.common.io.Files;
//此处省略class
/**
* 演示向文件中写入字节流
* 
* @param fileName 要写入文件的文件名
* @param contents 要写入的文件内容
*/
public void demoFileWrite(final String fileName, final String contents)
{
checkNotNull(fileName, "Provided file name for writing must NOT be null.");
checkNotNull(contents, "Unable to write null contents.");
final File newFile = new File(fileName);
try
{
Files.write(contents.getBytes(), newFile);
}
catch (IOException fileIoEx)
{
err.println(  "ERROR trying to write to file '" + fileName + "' - "
+ fileIoEx.toString());
}
}

二.获得文件内容

Files类提供了readLines方法可以方便的读取文件的内容,如下demo代码:

String testFilePath = "d:\\test.txt";
File testFile = new File(testFilePath);
List<String> lines = Files.readLines(testFile, Charsets.UTF_16);
for (String line : lines) {
System.out.println(line);
}

注意这里的readLines方法返回的是List\<String>的接口,这对于大文件处理是会有问题的。大文件处理可以使用readLines方法的另一个重载。下面的例子演示从一个大文件中逐行读取文本,并做行号计数。

package main.com.jd.coo.guava.io;
import java.io.File;
import java.io.IOException;
import com.google.common.base.Charsets;
import com.google.common.io.Files;
import com.google.common.io.LineProcessor;
/**
* Created by outofmemory.cn  on 2014/7/24.
*/
public class FilesDemo {
static class CounterLine implements LineProcessor<Integer> {
private int rowNum = 0;
@Override
public boolean processLine(String line) throws IOException {
rowNum ++;
return true;
}
@Override
public Integer getResult() {
return rowNum;
}
}
public static void main(String[] args) throws IOException {
String testFilePath = "d:\\test.txt";
File testFile = new File(testFilePath);
CounterLine counter = new CounterLine();
Files.readLines(testFile, Charsets.UTF_16, counter);
System.out.println(counter.getResult());
}
}

这个readLines的重载,需要我们实现一个LineProcessor的泛型接口,在这个接口的实现方法processLine方法中我们可以对行文本进行处理,getResult方法可以获得一个最终的处理结果,这里我们只是简单的返回了一个行计数。

另外还有readBytes方法可以对文件的字节做处理,readFirstLine可以返回第一行的文本,Files.toString(File,Charset)可以返回文件的所有文本内容。

三. 复制移动(剪切)文件

在Guava中复制文件操作提供了一组的copy方法,我们看一个示例:

/**
* 演示如何使用guava的Files.copy方法复制文件
* 
* @param sourceFileName 复制的源文件名
* @param targetFileName 目标文件名
*/
public void demoSimpleFileCopy(
final String sourceFileName, final String targetFileName)
{
checkNotNull(sourceFileName, "Copy source file name must NOT be null.");
checkNotNull(targetFileName, "Copy target file name must NOT be null.");
final File sourceFile = new File(sourceFileName);
final File targetFile = new File(targetFileName);
try
{
Files.copy(sourceFile, targetFile);
}
catch (IOException fileIoEx)
{
err.println(
"ERROR trying to copy file '" + sourceFileName
+ "' to file '" + targetFileName + "' - " + fileIoEx.toString());
}
}

Guava中移动文件使用move方法,用法和copy一样。

四. 比较文件内容

Guava中提供了Files.equal(File,File)方法来比较两个文件的内容是否完全一致,请看下面的示例:

/**
* 演示 Files.equal(File,File) 来比较两个文件的内容
* 
* @param fileName1 比较的文件1文件名
* @param fileName2 比较的文件2文件名
*/
public void demoEqual(final String fileName1, final String fileName2)
{
checkNotNull(fileName1, "First file name for comparison must NOT be null.");
checkNotNull(fileName2, "Second file name for comparison must NOT be null.");
final File file1 = new File(fileName1);
final File file2 = new File(fileName2);
try
{
out.println(
"File '" + fileName1 + "' "
+ (Files.equal(file1, file2) ? "IS" : "is NOT")
+ " the same as file '" + fileName2 + "'.");
}
catch (IOException fileIoEx)
{
err.println(
"ERROR trying to compare two files '"
+ fileName1 + "' and '" + fileName2 + "' - " + fileIoEx.toString());
}
}

五. 其他有用的方法

Guava的Files类中还提供了其他一些文件的简捷方法。比如

  1. touch方法创建或者更新文件的时间戳。
  2. createTempDir()方法创建临时目录
  3. Files.createParentDirs(File) 创建父级目录
  4. getChecksum(File)获得文件的checksum
  5. hash(File)获得文件的hash
  6. map系列方法获得文件的内存映射
  7. getFileExtension(String)获得文件的扩展名
  8. getNameWithoutExtension(String file)获得不带扩展名的文件名
  9. Guava的方法都提供了一些重载,这些重载可以扩展基本用法,我们也有必要去多了解一下,这些重载的方法。

转载于:https://my.oschina.net/u/1024107/blog/870449

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值