Guava File操作

Java的基本API对文件的操作很繁琐,为了向文件中写入一行文本,都需要写十几行的代码。guava对此作了很多改进,提供了很多方便的操作。

一. Guava的文件写入

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

import com.google.common.io.Files;

import java.io.File;
import java.io.IOException;

import static com.google.common.base.Preconditions.checkNotNull;

/**
 * Created by zhaoliangang on 15/6/26.
 */
public class GuavaFile {

    public static 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) {
            System.out.println("ERROR trying to write to file ‘" + fileName + "‘ - "
                    + fileIoEx.toString());
        }
    }

    public static void main(String[] args) {

        GuavaFile.demoFileWrite("/Users/zhaoliangang/Documents/work/test.txt", "hello stefanie zhao");

    }
}

二. 获得文件内容

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

public static void demoFileRead(final String filePath) throws IOException {
    File testFile = new File(filePath);
    List<String> lines = Files.readLines(testFile, Charsets.UTF_8);
    for (String line : lines) {
        System.out.println(line);
    }
}

但是这个readLime方法是一次性读数据到内存,大文件当然就出现内存溢出了。

我们是用guava提供的另外一种readLine方法:

static <T> T readLines(File file, Charset charset, LineProcessor<T> callback)

Streams lines from a File, stopping when our callback returns false, or we have read all of the lines.

public static void demoFileReadAsyn(final String filePath) throws IOException {
    File testFile = new File(filePath);
    Integer rowNum = Files.readLines(testFile, Charsets.UTF_16, new LineProcessor<Integer>() {
        private int rowNum = 0;
        public boolean processLine(String s) throws IOException {
            rowNum ++;
            return true;
        }

        public Integer getResult() {
            return rowNum;
        }
    });
    System.out.println(rowNum);
}

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

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

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

final File sourceFile = new File(sourceFileName);    
final File targetFile = new File(targetFileName);     
Files.copy(sourceFile, targetFile);

四. 比较文件内容

Files.equal(file1, file2)

五. 其他有用的方法

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)获得不带扩展名的文件名

Guava的方法都提供了一些重载,这些重载可以扩展基本用法,我们也有必要去多了解一下,这些重载的方法。

附上Files类的doc:

static void append(CharSequence from, File to, Charset charset)

Appends a character sequence (such as a string) to a file using the given character set.

static ByteSink asByteSink(File file, FileWriteMode... modes)

Returns a new ByteSink for writing bytes to the given file.

static ByteSource asByteSource(File file)

Returns a new ByteSource for reading bytes from the given file.

static CharSink asCharSink(File file, Charset charset, FileWriteMode... modes)

Returns a new CharSink for writing character data to the given file using the given character set.

static CharSource asCharSource(File file, Charset charset)

Returns a new CharSource for reading character data from the given file using the given character set.

static void copy(File from, Charset charset, Appendable to)

Copies all characters from a file to an appendable object, using the given character set.

static void copy(File from, File to)

Copies all the bytes from one file to another.

static void copy(File from, OutputStream to)

Copies all bytes from a file to an output stream.

static void createParentDirs(File file)

Creates any necessary but nonexistent parent directories of the specified file.

static File createTempDir()

Atomically creates a new directory somewhere beneath the system‘s temporary directory (as defined by the java.io.tmpdirsystem property), and returns its name.

static boolean equal(File file1, File file2)

Returns true if the files contains the same bytes.

static TreeTraverser<File> fileTreeTraverser()

Returns a TreeTraverser instance for File trees.

static String getFileExtension(String fullName)

Returns the file extension for the given file name, or the empty string if the file has no extension.

static String getNameWithoutExtension(String file)

Returns the file name without its file extension or path.

static HashCode hash(File file, HashFunction hashFunction)

Computes the hash code of the file using hashFunction.

static Predicate<File> isDirectory()

Returns a predicate that returns the result of File.isDirectory() on input files.

static Predicate<File> isFile()

Returns a predicate that returns the result of File.isFile() on input files.

static MappedByteBuffer map(File file)

Fully maps a file read-only in to memory as per FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long).

static MappedByteBuffer map(File file, FileChannel.MapMode mode)

Fully maps a file in to memory as per FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long)using the requested FileChannel.MapMode.

static MappedByteBuffer map(File file, FileChannel.MapMode mode, long size)

Maps a file in to memory as per FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long) using the requested FileChannel.MapMode.

static void move(File from, File to)

Moves a file from one path to another.

static BufferedReader newReader(File file, Charset charset)

Returns a buffered reader that reads from a file using the given character set.

static BufferedWriter newWriter(File file, Charset charset)

Returns a buffered writer that writes to a file using the given character set.

static <T> T readBytes(File file, ByteProcessor<T> processor)

Process the bytes of a file.

static String readFirstLine(File file, Charset charset)

Reads the first line from a file.

static List<String> readLines(File file, Charset charset)

Reads all of the lines from a file.

static <T> T readLines(File file, Charset charset, LineProcessor<T> callback)

Streams lines from a File, stopping when our callback returns false, or we have read all of the lines.

static String simplifyPath(String pathname)

Returns the lexically cleaned form of the path name, usually (but not always) equivalent to the original.

static byte[] toByteArray(File file)

Reads all bytes from a file into a byte array.

static String toString(File file, Charset charset)

Reads all characters from a file into a String, using the given character set.

static void touch(File file)

Creates an empty file or updates the last updated timestamp on the same as the unix command of the same name.

static void write(byte[] from, File to)

Overwrites a file with the contents of a byte array.

static void write(CharSequence from, File to, Charset charset)

Writes a character sequence (such as a string) to a file using the given character set.

时间: 2024-10-11 05:12:30

Guava File操作的相关文章

Java File操作汇总

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/41223841 本文通过大量的示例,介绍和讲解了Java File操作. 1)创建文件  2)删除文件  3)判断文件是否存在  4)创建文件夹  5)文件类型判断  6)获取文件信息 7)获取目录下文件名  8)递归打印所有文件名  9)递归删除整个文件夹  10)Properties类 11)SequenceInputStream类:连接多个流  12)对象序列化实现Ser

Java文件File操作一:文件的创建和删除

一.简述 File 文件类,主要对文件进行相关操作.常用的File操作有:文件(夹)的创建.文件(夹)的删除,文件的读入和下载(复制)等: 二.文件(夹)的创建和删除 1.创建过程 实例: //create a new File @Test public void testCreateFile(){ File m=new File("E://file"); //創建文件夾 //判断文件夹存在否 if(!m.exists()){ m.mkdir(); //创建文件夹 } File f=n

【转载】Java File操作汇总

转载自博客:https://passport.cnblogs.com/user/signin?ReturnUrl=https%3A%2F%2Fwww.cnblogs.com%2F 本文通过大量的示例,介绍和讲解了Java File操作. 1)创建文件 2)删除文件 3)判断文件是否存在 4)创建文件夹 5)文件类型判断 6)获取文件信息 7)获取目录下文件名 8)递归打印所有文件名 9)递归删除整个文件夹 10)Properties类 11)SequenceInputStream类:连接多个流

Guava 实用操作集合

guava是 google 几个java核心类库的集合,包括集合.缓存.原生类型.并发.常用注解.基本字符串操作和I/O等等. 大家平时经常遇到某些相同的问题,自己写代码也都能解决.但是久而久之会感觉到很痛苦,因为我们一而再,再而三的重复发明轮子.为了不再忍受痛苦,也许我们可以总结自己的类库,但是新的问题来了.自己总结的类库很难与大家分享,不能帮助到更多人.同时自己的类库要不断的进行维护.guava 正是出于这样的目的而来的. 只说不练不行啊,让我们举上一两个例子 判断 String不为null

File操作-RandomAccessFile

一.知识点笔记 1. 文件操作——RandomAccessFile 1. 创建对象 Java提供了一个可以对文件随机访问的操作,访问包括读和写操作.该类名为RandomAccessFile.该类的读写是基于指针的操作. 1.1.2. 只读模式 RandomAccessFile在对文件进行随机访问操作时有两个模式,分别为只读模式(只读取文件数据),和读写模式(对文件数据进行读写). 只读模式: 在创建RandomAccessFile时,其提供的构造方法要求我们传入访问模式: RandomAcces

File操作

System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操作,在使用时需要引用System.IO命名空间.下面通过程序实例来介绍其主要属性和方法.(1) 文件打开方法:File.Open () 该方法的声明如下:     public static FileStream Open(string path,FileMode mode)  下面的代码打开存放在c:\tempuploads目录下名称为newFile.txt文件,并在该文件中写入hello.priva

Java IO 之File操作

一.File中的两个常量分隔符 package File; import java.io.File; /** * 两个常量 * 1.路径分隔符 ; * 2.名称分隔符 \ (windows) /(linux等) */ @SuppressWarnings("all") public class Demo01 { public static void main(String[] args) { System.out.println(File.pathSeparator); System.o

【第八篇】Python的文件(file)操作

一.方法介绍 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError. 注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法. 1 # open函数的语法格式 2 3 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None

Java学习笔记-File操作(API)

一:知识点总结 1.File类只用于表示文件(目录)的信息,不能对文件的内容进行访问. 2.创建File对象时候的路径问题 (1)File file=new File(“绝对路径”); “绝对路径”: 1)windows: “d:/test” -------Java提供的自动处理的方法,程序员比较常用 “d:\\test”-----转义字符 “d:”+File.separator+”test” 2)Linnux/Unix/Mac A.”/home/soft01/test” B.  ”/home/