方法名称 | 方法描述 |
---|---|
append(CharSequence from, File to, Charset charset) |
已过时。使用 asCharSink(to, charset, FileWriteMode.APPEND).write(from),计划于2019年1月删除. |
asByteSink(File file, FileWriteMode... modes) |
返回一个新的ByteSink,用于将字节写入给定文件. |
asByteSource(File file) |
返回一个新的ByteSource,用于从给定文件中读取字节. |
asCharSink(File file, Charset charset, FileWriteMode... modes) |
返回一个新的CharSink,用于使用给定的字符集将字符数据写入给定文件. |
asCharSource(File file, Charset charset) |
返回一个新的CharSource,用于使用给定的字符集从给定文件中读取字符数据. |
copy(File from, Charset charset, Appendable to) |
已过时。使用 asCharSource(from, charset).copyTo(to). 计划于2019年1月删除. |
copy(File from, File to) |
将所有字节从一个文件复制到另一个文件. |
copy(File from, OutputStream to) |
将文件中的所有字节复制到输出流. |
createParentDirs(File file) |
需要注意的,如果最终创建失败,不能保证的是没有任何文件夹创建,也许在他的父目录路径上已经有某些文件夹被创建了. |
createTempDir() |
自动在系统的临时文件目录下创建一个新的目录,并返回他的名字。 |
equal(File file1, File file2) |
比较两个文件中是否包含相等的字节数,如果相等返回true,否则返回false. |
fileTraverser() |
返回文件和目录树的Traverser实例. |
getFileExtension(String fullName) |
返回一个文件名的扩展名,如果一个文件没有扩展名,他将会返回一个空字符串. |
getNameWithoutExtension(String file) |
返回没有文件扩展名或路径的文件名. |
hash(File file, HashFunction hashFunction) |
已过时。使用 asByteSource(file).hash(hashFunction). 计划于2019年1月删除. |
isDirectory() |
返回一个predicate,内容是 File.isDirectory(). |
isFile() |
返回一个 predicate,内容是 File.isFile(). |
map(File file) |
把可读的文件Map到内存里,根据FileChannel.map将文件以只读方式完全映射到内存 FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long). |
map(File file, FileChannel.MapMode mode) |
把文件使用规定的方式完全映射到内存中。使用 FileChannel.MapMode,根据FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long)将文件完全映射到内存。 |
map(File file, FileChannel.MapMode mode, long size) |
该方法和上面两个是一样的,只不过这个添加了一个size,意思是每次要Map到内存的大小,这个和上面的比较是这个可以正常使用. |
newReader(File file, Charset charset) |
该方法使用提供的编码方式把输入文件做成一个BufferedReader对象,并返回。 |
newWriter(File file, Charset charset) |
该方法是和上边的类似功能。. |
readBytes(File file, ByteProcessor |
已过时。使用 asByteSource(file).read(processor). 计划于2019年1月删除. |
readFirstLine(File file, Charset charset) |
已过时。使用 asCharSource(file, charset).readFirstLine(). 计划于2019年1月删除. |
readLines(File file, Charset charset) |
从文件中读取所有行。 |
readLines(File file, Charset charset, LineProcessor |
已过时。使用 asCharSource(file, charset).readLines(callback). 计划于2019年1月删除. |
simplifyPath(String pathname) |
该方法是将提供的目录路径简化,具体的就是空的字符串变成“.”,然后“.”依然保留,将“./”折叠起来,“../”不一定折叠起来,可能会,删除多余的“/”,而且会删除尾部的“/”。. |
toByteArray(File file) |
将一个文件直接转化成一个字节数组,并返回。 |
toString(File file, Charset charset) |
已过时。使用 asCharSource(file, charset).read(). 计划于2019年1月删除. |
touch(File file) |
创建一个空的文件或者使用和unix相同命令的方式更新文件的最后更新时间戳. |
write(byte[] from, File to) |
将一个字节数组里的数据全部写入到文件to里边. |
write(CharSequence from, File to, Charset charset) |
已过时。使用 asCharSink(to, charset).write(from). 计划于2019年1月删除. |
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.FileWriteMode;
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 = "D:\\Users\\ex_luosz5\\Desktop\\test.txt";
/**
* 文件拷贝
*/
@Test
public void copy() throws Exception {
Files.copy(new File("from file path"), new File("to file path"));
}
/**
* 文件移动
*/
@Test
public void move() throws Exception {
Files.move(new File("from file path"), new File("to file path"));
}
/**
* 文件逐行读取
*/
@Test
public void readLines() throws Exception {
File file = new File(SOURCE_PATH);
List lines = Files.readLines(file, Charsets.UTF_8);
String result = Joiner.on("\n").join(lines);
System.out.println("读取内容:" + result);
}
/**
* 文件整体读取
*/
@Test
public void asCharSource() 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 值
*
* 在文件对比时候,可以看两个文件等hashCode 是否相等,比如拷贝文件后是否有损
*/
@Test
public void asByteSource() throws Exception {
HashCode hashCode = Files.asByteSource(new File(SOURCE_PATH)).hash(Hashing.sha256());
HashCode hashCode2 = Files.asByteSource(new File(SOURCE_PATH)).hash(Hashing.sha256());
System.out.println(hashCode.equals(hashCode2));
System.out.println(hashCode);
}
/**
* 文件书写
*/
@Test
public void write() 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("D:\\Users\\ex_luosz5\\Desktop\\testnull.txt"));
}
/**
* 递归文件
*/
@Test
public void test8() throws Exception {
String path = "/Users/lasse/Desktop";
List list = new ArrayList<>();
this.recursiveList(new File(path), list);
list.forEach(System.out::println);
}
private void recursiveList(File root, List 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 = "D:\\Users\\ex_luosz5\\Desktop\\噪音";
Iterable files = Files.fileTraverser().breadthFirst(new File(path));
files.forEach(System.out::println);
System.out.println("-------------------截断-----------------------------");
// 第一次访问到节点的顺序(Pre-order)
Iterable depthFirstPreOrderFiles = Files.fileTraverser().depthFirstPreOrder(new File(path));
files.forEach(System.out::println);
System.out.println("-------------------截断-----------------------------");
// 访问到最后,然后回退访问节点的顺序(Post-order)
Iterable depthFirstPostOrderFiles = Files.fileTraverser().depthFirstPostOrder(new File(path));
files.forEach(System.out::println);
}
}