Files

write
1  public static void write(CharSequence from, File to, Charset charset) throws IOException {
2         asCharSink(to, charset, new FileWriteMode[0]).write(from);
3     }

 

write
1  public static void write(byte[] from, File to) throws IOException {
2         asByteSink(to, new FileWriteMode[0]).write(from);
3     }

Files类提供了几种方法来通过ByteSink和CharSink类操作文件。

readLines
 1 public static List<String> readLines(File file, Charset charset) throws IOException {
 2         return (List)readLines(file, charset, new LineProcessor() {
 3             final List<String> result = Lists.newArrayList();
 4 
 5             public boolean processLine(String line) {
 6                 this.result.add(line);
 7                 return true;
 8             }
 9 
10             public List<String> getResult() {
11                 return this.result;
12             }
13         });
14     }
15 
16     public static <T> T readLines(File file, Charset charset, LineProcessor<T> callback) throws IOException {
17         return asCharSource(file, charset).readLines(callback);
18     }

这个readLines的重载,需要我们实现一个LineProcessor的泛型接口,在这个接口的实现方法processLine方法中我们可以对行文本进行处理,getResult方法可以获得一个最终的处理结果,一般是大文件的读取会用到这个。

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

equal
 1  public static boolean equal(File file1, File file2) throws IOException {
 2         Preconditions.checkNotNull(file1);
 3         Preconditions.checkNotNull(file2);
 4         if(file1 != file2 && !file1.equals(file2)) {
 5             long len1 = file1.length();
 6             long len2 = file2.length();
 7             return len1 != 0L && len2 != 0L && len1 != len2?false:asByteSource(file1).contentEquals(asByteSource(file2));
 8         } else {
 9             return true;
10         }
11     }

Guava中提供了{*}Files.equal(File,File)*方法来比较两个文件的内容是否完全一致

posted @ 2016-07-29 22:02  走在大牛的路上  阅读(459)  评论(0编辑  收藏  举报