“哦,Rishi!嗨!”
“嗨,阿米戈!生活怎么样?”
“太好了。Bilaabo 刚刚告诉我一些关于 File 的有趣事情,以及如何使用它。”
“碰巧的是,我想我有一些关于这个话题的补充。”
“真的吗?那我洗耳恭听。”
“好吧,听着。Java 在不断发展。它的开发人员一直在寻找新的方法来更有效地做不同的事情。在 Java 7 中,他们添加了一个替代 File 类的方法。”

“选择?”
“是的。他们以File类为基础,添加了一些新东西,重命名了方法,然后也将其拆分为两个。所以现在有两个新类:Path和Files。Path 实际上是 File 的新类比类,File是一个实用类(类似于 Arrays 和 Collections 类)。File 类的所有静态方法都在那里。就 OOP 而言,这样做是“更正确的”。
“好吧,如果就 OOP 而言,那好吧。那么改变了什么?”
“首先,他们决定不重现返回String 和File对象的方法 。在Path 类中,所有方法都返回一个Path。
“其次,他们将大量静态实用方法移到了Files类中。”
“第三,使用相对路径变得更加方便。”
“这里是方法列表:”
Path 类的方法 | 描述 |
---|---|
boolean isAbsolute() |
如果路径是绝对路径,则返回 true。 |
Path getRoot() |
返回当前路径的根,即最顶层目录。 |
Path getFileName() |
从当前路径返回文件名。 |
Path getParent() |
从当前路径返回目录。 |
boolean startsWith(Path other) |
检查当前路径是否以传递的路径开头。 |
boolean endsWith(Path other) |
检查当前路径是否以传递的路径结尾。 |
Path normalize() |
规范化当前路径。例如,将 «c:/dir/dir2/../a.txt» 转换为 «c:/dir/a.txt» |
Path relativize(Path other) |
计算两条路径的相对路径,即«路径之间的差异» |
Path resolve(String other) |
使用当前路径和相对路径解析绝对路径。 |
URI toUri() |
如果是当前路径/文件,则返回 URI。 |
Path toAbsolutePath() |
如果是相对路径,则将路径转换为绝对路径。 |
File toFile() |
返回对应于当前 Path 对象的 File 对象。 |
“而现在的道路——那是什么?”
“这是传递给正在调用其方法的 Path 对象的构造函数的路径。”
“好的。那么Files类有哪些方法?”
“你是不是着急去哪里?我现在就告诉你,最重要的方法如下:”
文件类的方法 | 描述 |
---|---|
Path createFile(…) |
在磁盘上创建一个文件。 |
Path createDirectory(…) |
创建一个目录。 |
Path createDirectories(…) |
创建目录及其所有子目录。 |
Path createTempFile(…) |
创建一个临时文件。 |
Path createTempDirectory(…) |
创建一个临时目录。 |
void delete(Path path) |
删除文件。 |
Path copy(Path source, Path target,…) |
复制一个文件。 |
Path move(Path source, Path target,…) |
移动文件。 |
boolean isSameFile(Path, Path) |
比较两个文件。 |
boolean isDirectory(Path) |
路径是目录吗? |
boolean isRegularFile(Path) |
路径是文件吗? |
long size(Path) |
返回文件大小。 |
boolean exists(Path) |
是否存在同名对象? |
boolean notExists(Path) |
是否不存在同名对象? |
long copy(InputStream, OutputStream) |
将字节从 InputStream 复制到 OutputStream。 |
long copy(Path, OutputStream) |
将路径中的所有字节复制到 OutputStream。 |
long copy(InputStream, Path) |
将所有字节从 InputStream 复制到 Path。 |
byte[] read(InputStream, int initialSize) |
从 InputStream 中读取一个字节数组。 |
byte[] readAllBytes(Path path) |
从 InputStream 读取所有字节。 |
List<String> readAllLines(Path path,..) |
读取文本文件并返回字符串列表。 |
Path write(Path path, byte[] bytes,…) |
将字节数组写入文件。 |
“真有趣!这么多很酷的功能,而且都在同一个地方。”
“嗯,你看。假设你想从网上下载一个文件,然后将它发送给某人。为此,在磁盘上创建一个临时文件并将读取的数据保存到其中是非常方便的。”
“从网上下载文件难吗?”
“很简单,看这个例子:”
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();
Path tempFile = Files.createTempFile("temp-",".tmp");
Files.copy(inputStream, tempFile);
“就这样吗?”
“是啊,你希望看到什么?只有4行。”
"第 1 行。 创建一个 URL 对象,图像文件的 URL 将传递到该对象。
"第 2 行。 在 url 对象上打开用于读取文件的流 (InputStream)。
"第 3 行。 该createTempFile
方法用于创建临时文件。
“第 4 行 。Files.copy 方法将数据从复制 inputStream
到tempFile
。就是这样。”
“巧妙!”
“太好了,很高兴你喜欢。剩下的方法我想你可以自己想出来。我会让迪亚哥给你分几个任务。”
“顺便说一下,这里有一个关于此材料的好链接”
GO TO FULL VERSION