Guava Files 文件工具类
一、接口声明
以下是 com.google.common.io.Files
接口的声明:
@Beta @GwtIncompatible public final class Files extends Object
二、接口方法
官方文档:https://google.github.io/guava/releases/27.0.1-jre/api/docs/com/google/common/io/Files.html
修饰符和类型 | 方法描述 |
---|---|
static void | append(CharSequence from, File to, Charset charset) 已过时。使用 asCharSink(to, charset, FileWriteMode.APPEND).write(from),计划于2019年1月删除. |
static ByteSink | asByteSink(File file, FileWriteMode... modes) 返回一个新的ByteSink,用于将字节写入给定文件. |
static ByteSource | asByteSource(File file) 返回一个新的ByteSource,用于从给定文件中读取字节. |
static CharSink | asCharSink(File file, Charset charset, FileWriteMode... modes) 返回一个新的CharSink,用于使用给定的字符集将字符数据写入给定文件. |
static CharSource | asCharSource(File file, Charset charset) 返回一个新的CharSource,用于使用给定的字符集从给定文件中读取字符数据. |
static void | copy(File from, Charset charset, Appendable to) 已过时。使用 asCharSource(from, charset).copyTo(to). 计划于2019年1月删除. |
static void | copy(File from, File to) 将所有字节从一个文件复制到另一个文件. |
static void | copy(File from, OutputStream to) 将文件中的所有字节复制到输出流. |
static void | createParentDirs(File file) 需要注意的,如果最终创建失败,不能保证的是没有任何文件夹创建,也许在他的父目录路径上已经有某些文件夹被创建了. |
static File | createTempDir() 自动在系统的临时文件目录下创建一个新的目录,并返回他的名字。 |
static boolean | equal(File file1, File file2) 比较两个文件中是否包含相等的字节数,如果相等返回true,否则返回false. |
static Traverser<File> | fileTraverser() 返回文件和目录树的Traverser实例. |
static String | getFileExtension(String fullName) 返回一个文件名的扩展名,如果一个文件没有扩展名,他将会返回一个空字符串. |
static String | getNameWithoutExtension(String file) 返回没有文件扩展名或路径的文件名. |
static HashCode | hash(File file, HashFunction hashFunction) 已过时。使用 asByteSource(file).hash(hashFunction). 计划于2019年1月删除. |
static Predicate<File> | isDirectory() 返回一个predicate,内容是 File.isDirectory(). |
static Predicate<File> | isFile() 返回一个 predicate,内容是 File.isFile(). |
static MappedByteBuffer | map(File file) 把可读的文件Map到内存里,根据FileChannel.map将文件以只读方式完全映射到内存 FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long). |
static MappedByteBuffer | map(File file, FileChannel.MapMode mode) 把文件使用规定的方式完全映射到内存中。使用 FileChannel.MapMode,根据FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long)将文件完全映射到内存。 |
static MappedByteBuffer | map(File file, FileChannel.MapMode mode, long size) 该方法和上面两个是一样的,只不过这个添加了一个size,意思是每次要Map到内存的大小,这个和上面的比较是这个可以正常使用. |
static BufferedReader | newReader(File file, Charset charset) 该方法使用提供的编码方式把输入文件做成一个BufferedReader对象,并返回。 |
static BufferedWriter | newWriter(File file, Charset charset) 该方法是和上边的类似功能。. |
static <T> T | readBytes(File file, ByteProcessor<T> processor) 已过时。使用 asByteSource(file).read(processor). 计划于2019年1月删除. |
static String | readFirstLine(File file, Charset charset) 已过时。使用 asCharSource(file, charset).readFirstLine(). 计划于2019年1月删除. |
static List<String> | readLines(File file, Charset charset) 从文件中读取所有行。 |
static <T> T | readLines(File file, Charset charset, LineProcessor<T> callback) 已过时。使用 asCharSource(file, charset).readLines(callback). 计划于2019年1月删除. |
static String | simplifyPath(String pathname) 该方法是将提供的目录路径简化,具体的就是空的字符串变成“.”,然后“.”依然保留,将“./”折叠起来,“../”不一定折叠起来,可能会,删除多余的“/”,而且会删除尾部的“/”。. |
static byte[] | toByteArray(File file) 将一个文件直接转化成一个字节数组,并返回。 |
static String | toString(File file, Charset charset) 已过时。使用 asCharSource(file, charset).read(). 计划于2019年1月删除. |
static void | touch(File file) 创建一个空的文件或者使用和unix相同命令的方式更新文件的最后更新时间戳. |
static void | write(byte[] from, File to) 将一个字节数组里的数据全部写入到文件to里边. |
static void | write(CharSequence from, File to, Charset charset) 已过时。使用 asCharSink(to, charset).write(from). 计划于2019年1月删除. |
三、测试类
package com.example.guava.io; import com.google.common.base.Charsets; import com.google.common.base.Joiner; import com.google.common.hash.HashCode; import com.google.common.hash.Hashing; import com.google.common.io.Files; import org.junit.Test; import java.io.File; import java.util.ArrayList; import java.util.List; public class FilesTest { private String SOURCE_PATH = "/Users/liurenkui/desktop/grava_demo.txt"; /** * 文件拷贝 */ @Test public void test1() throws Exception { Files.copy(new File("from file path"), new File("to file path")); } /** * 文件移动 */ @Test public void test2() throws Exception { Files.move(new File("from file path"), new File("to file path")); } /** * 文件逐行读取 */ @Test public void test3() throws Exception { File file = new File(SOURCE_PATH); List<String> lines = Files.readLines(file, Charsets.UTF_8); String result = Joiner.on("\n").join(lines); System.out.println("读取内容:" + result); } /** * 文件整体读取 */ @Test public void test4() throws Exception { // String result = Files.asCharSource(new File(SOURCE_PATH), Charsets.UTF_8).readFirstLine(); // 第一行 String result = Files.asCharSource(new File(SOURCE_PATH), Charsets.UTF_8).read(); System.out.println("读取内容:" + result); } /** * 文件 hash 值 * <p> * 在文件对比时候,可以看两个文件等hashCode 是否相等,比如拷贝文件后是否有损 */ @Test public void tes54() throws Exception { HashCode hashCode = Files.asByteSource(new File(SOURCE_PATH)).hash(Hashing.sha256()); System.out.println(hashCode); } /** * 文件书写 */ @Test public void test6() throws Exception { Files.asCharSink(new File(SOURCE_PATH), Charsets.UTF_8).write("覆盖 内容"); // Files.asCharSink(new File(SOURCE_PATH), Charsets.UTF_8, FileWriteMode.APPEND).write("\n\n追加 内容"); } /** * 创建空文件 */ @Test public void test7() throws Exception { Files.touch(new File("")); } /** * 递归文件 */ @Test public void test8() throws Exception { String path = "/Users/liurenkui/Desktop"; List<File> list = new ArrayList<>(); this.recursiveList(new File(path), list); list.forEach(System.out::println); } private void recursiveList(File root, List<File> fileList) { if (root.isHidden()) return; if (root.isFile()) { fileList.add(root); } else { File[] files = root.listFiles(); for (File f : files) { recursiveList(f, fileList); } } } /** * 递归文件 * * breadthFirst 为【广度优先遍历】 * depthFirstPreOrder 和 depthFirstPostOrder 为【深度优先遍历】 * * 广度优先、深度优先 参考文章:https://www.jishux.com/p/7dbaf8611d052037 * */ @Test public void test9() throws Exception { String path = "/Users/liurenkui/Desktop"; Iterable<File> files = Files.fileTraverser().breadthFirst(new File(path)); files.forEach(System.out::println); // 第一次访问到节点的顺序(Pre-order) // Iterable<File> files = Files.fileTraverser().depthFirstPreOrder(new File(path)); // files.forEach(System.out::println); // 访问到最后,然后回退访问节点的顺序(Post-order) // Iterable<File> files = Files.fileTraverser().depthFirstPostOrder(new File(path)); // files.forEach(System.out::println); } }
四、相关文章
未经允许请勿转载:程序喵 » Google Guava 快速入门 —— 【文件流】Files 文件工具类