原文连接:https://blog.csdn.net/qq877728715/article/details/104499687/
文章目录
Java7新增文件IO类
Java7中文件IO发生了很大的变化,专门引入了不少新的类:java
java.nio.file.DirectoryStream;
java.nio.file.FileSystem;
java.nio.file.FileSystems;
java.nio.file.Files;
java.nio.file.Path;
java.nio.file.Paths;
java.nio.file.attribute.FileAttribute;
java.nio.file.attribute.PosixFilePermission;
java.nio.file.attribute.PosixFilePermissions;
安全
在java中文件或是目录习惯用java.io.File
对象来表示,可是File类有不少缺陷app
-
它的不少方法不能抛出异常工具
-
它的delete方法常常莫名其妙的失败等,旧的File类常常是程序失败的根源。测试
-
所以在Java7中有了更好的替代:
java.nio.file.Path
及java.nio.file.Files
。ui-
Path接口的名字很是恰当,就是表示路径的,API中讲
Path对象能够是一个文件,一个目录,或是一个符号连接,也能够是一个根目录。
用法很简单。建立Path并不会建立物理文件或是目录,path实例常常引用并不存在的物理对象,要真正建立文件或是目录,须要用到Files类
。编码 -
Files类是一个很是强大的类,它提供了处理文件和目录以及读取文件和写入文件的静态方法。 能够用它
建立和删除路径。复制文件。检查路径是否存在等。
此外。Files还拥有建立流对象
的方法。spa
-
一.Paths
Paths类仅由静态方法组成,经过转换路径字符串返回Path或URI
。.net
- 由于就两个方法用来生成Path对象,以供Path和Files使用;而Path也常常由Paths来生成,又或者File类有一个toPath();方法能够使用
1.建立Paths
二.Path
Path就是取代File的,用于来表示文件路径和文件。能够有多种方法来构造一个Path对象来表示一个文件路径,或者一个文件:
- 该接口的实现是不可变且安全的,可供多个并行线程使用。
线程
1.建立Path
1.1.建立Path的三种方式
建立Path的三种方式
Path path=FileSystems.getDefault().getPath("d:/users/日记5.txt"); //并无实际建立路径,而是一个指向d:/users/日记5.txt路径的引用
Path path=Paths.get(“d:/users/日记5.txt”); //Paths类提供了这个快捷方法,直接经过它的静态get方法建立path
Path path= = new File(“d:/users/日记5.txt”).toPath();
2.Path经常使用方法
Path接口没什么判断方法,其实更多的判断和操做都在Files工具类里面
boolean isAbsolute() //告诉这条路是不是绝对的 boolean endsWith(Path other) //测试此路径是否以给定的路径结束 boolean endsWith(String other) //测试此路径是否以给定字符串结束,如"c:/a/banana/cat"能够以"/banana/cat"结尾,但不能以"t"结尾 boolean startsWith(Path other) //测试此路径是否以给定的路径开始。 boolean startsWith(String other) //测试此路径是否以给定字符串开始,跟上面同样规律
Path getFileName()
//将此路径表示的文件或目录的名称返回为 Path对象,文件名或文件夹名,不含路径
Path getName(int index)
//返回此路径的名称元素做为 Path对象。目录中最靠近root的为0,最远的为(count-1),count由下面的方法得到
int getNameCount()
//返回路径中的名称元素的数量。0则只有root
Path getParent()
//返回 父路径,若是此路径没有父返回null,如/a/b/c返回/a/b,配合下面的方法消除".“或”…"
Path normalize()
//返回一个路径,该路径是冗余名称元素的消除。如消除掉"."、"…"
Path getRoot()
//返回此路径的根组分做为 Path对象,或 null若是该路径不具备根组件。如返回"c:/"
Path relativize(Path other)
//构造此路径和给定路径之间的相对路径。有点难理解,p1-“Topic.txt”,p2-“Demo.txt”,p3-"/Java/JavaFX/Topic.txt",p4-"/Java/2011";;那么p1和p2的结果是"…/Demo.txt";;p2和p1的结果是"…/Topic.txt";;p3和p4的结果是"…/…/2011";;p4和p3的结果是"…/JavaFX/Topic.txt"
Path resolve(String other)
//将给定的路径字符串转换为 Path。如"c:/a/b"和字符串"c.txt"的结果是"c:/a/b/c.txt";更像是拼接
Path resolveSibling(String other)
//将给定的路径字符串转换为 Path。如"c:/a/b.txt"和字符串"c.txt"的结果是"c:/a/c.txt";更像是替换
Path subpath(int beginIndex, int endIndex)
//返回一个相对的 Path ,它是该路径的名称元素的子序列,如"d:/a/b/c.txt"参数为(1,3)返回一个"b/c.txt"
Path toAbsolutePath()
//返回表示此路径的绝对路径的 Path对象。包括盘符和文件名或文件夹名
Iterator<Path> iterator()
//返回此路径的名称元素的迭代器。“c:/a/b/c.txt"的迭代器能够next出如下"a”“b”“c.txt”
File toFile()
//返回表示此路径的File对象
三.Files
Files类只包含对文件,目录或其余类型文件进行操做的静态方法。主要和Path接口的对象进行配合使用
1.判断方法:
2.删除方法
- 4
3.复制方法
4.移动和重命名方法
5.建立文件和文件夹方法
6.文件属性方法
static <V extends FileAttributeView> V getFileAttributeView(Path path, 类<V> type, LinkOption... options) //返回给定类型的文件属性视图。指定六个视图其中一种,上面一开始有点到。拿到的xxxAttributeView会有一个跟下面同样名字的readAttributes方法来获得一个xxxAttributes真正的获取操做就全是在这个xxxAttributes类的对象里get啦 static <A extends BasicFileAttributes> A readAttributes(Path path, 类<A> type, LinkOption... options) //读取文件的属性做为批量操做。指定一个xxxAttributes,获得一个实例,经过里面的方法获得时间等基本属性
static Object getAttribute(Path path, String attribute, LinkOption... options)
//读取文件属性的值。这个 String attributes 参数的语法固定是以 view-name:comma-separated-attributes 的形式;view-name指定视图名如basic,posix,acl等,不写默认为basic;有写默认要加":";能够用"basic:“或”"读取全部,又或者用"basic:size,lastModifiedTime"读取大小和修改时间。具体还有那些属性能够看具体指定的类,好比basic视图就看BasicFileAttributes这个接口都有哪些方法,能够读取哪些文件属性。同理,下面的 String attributes 同样是这个理
static Map<String,Object> readAttributes(Path path, String attributes, LinkOption... options)
//读取一组文件属性做为批量操做。
static Path setAttribute(Path path, String attribute, Object value, LinkOption... options)
//设置文件属性的值。
/* 下面这些也是获取属性的方法,不过还没研究到是怎么用的 */
static FileTime getLastModifiedTime(Path path, LinkOption... options)
//返回文件的上次修改时间。
static UserPrincipal getOwner(Path path, LinkOption... options)
//返回文件的全部者。
static Set<PosixFilePermission> getPosixFilePermissions(Path path, LinkOption... options)
//返回文件的POSIX文件权限。
static Path setLastModifiedTime(Path path, FileTime time)
//更新文件上次修改的时间属性。
static Path setOwner(Path path, UserPrincipal owner)
//更新文件全部者。
static Path setPosixFilePermissions(Path path, Set<PosixFilePermission> perms)
//设置文件的POSIX权限。
static long size(Path path)
//返回文件的大小(以字节为单位)。
7.读取、编辑文件内容方法
以上方法适用于处理中等长度的文本文
件,若是要处理的文件长度比较大,或者是二进制文件,那么仍是应该使用流
8.遍历文件列表方法
- newDirectoryStream只是遍历当前Path的子目录列表,或者写一个方法里面递归调用实现遍历到底;
- walk则是能够经过maxDepth参数来决定遍历的深度,后面的FileVisitOption参数无关紧要;
- list相似于newDirectoryStream,区别是walk和newDirectoryStream是递归的,list是非递归的
static DirectoryStream<Path> newDirectoryStream(Path dir) //打开一个目录,返回一个DirectoryStream以遍历目录中的全部条目。最好用 try-with-resources 构造,能够自动关闭资源。返回的 DirectoryStream<Path> 其实能够直接使用 Iterator或者for循环 遍历每个 dir 下面的文件或目录 static DirectoryStream<Path> newDirectoryStream(Path dir, DirectoryStream.Filter<? super Path> filter) //上面方法的重载,经过实现参数二(有一个 boolean accept(Path p) 方法来判断文件是否符合须要)来达到过滤的目的。如accept方法中写"return (Files.size(p) > 8192L);"来匹配大于8k的文件 static DirectoryStream<Path> newDirectoryStream(Path dir, String glob) //上面方法的重载,能够经过参数二做为过滤匹配出对应的文件。如 newDirectoryStream(dir, "*.java") 用于遍历目录里全部java后缀的文件
static Stream<Path> walk(Path start, FileVisitOption... options)
//深度优先遍历。返回一个 Stream ,它经过 Path根据给定的起始文件的文件树懒惰地填充 Path 。
static Stream<Path> walk(Path start, int maxDepth, FileVisitOption... options)
//深度优先遍历。返回一个 Stream ,它是经过走根据给定的起始文件的文件树懒惰地填充 Path 。
static Stream<Path> list(Path dir)
//返回一个懒惰的填充 Stream ,其元素是 Stream中的条目。返回的 Stream 里封装了一个 DirectoryStream 用于遍历。
四.Path和Files使用
import org.junit.Test; import java.io.*; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.PosixFilePermission; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Stream;
public class PathAndFilesTest {
/**
* 建立Path
*/
@Test
public void createPath() throws URISyntaxException, MalformedURLException {
//1.Paths
Path path = Paths.get(“F:/测试数据.csv”);
System.out.println(path.getFileName());
Path path1 = Paths.get(new URI(“file:///f:/测试数据.csv”));
<span class="token comment">//2.FileSystems</span> Path path2 <span class="token operator">=</span> FileSystems<span class="token punctuation">.</span><span class="token function">getDefault</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getPath</span><span class="token punctuation">(</span><span class="token string">"F:/测试数据.csv"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//3.File</span> Path path3 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"F:/测试数据.csv"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toPath</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * 建立一个空文件/文件夹 */</span> <span class="token annotation punctuation">@Test</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> IOException <span class="token punctuation">{<!-- --></span> <span class="token comment">//文件夹</span> Path path <span class="token operator">=</span> Paths<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"F:/hello"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>Files<span class="token punctuation">.</span><span class="token function">exists</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token comment">//若是不存在</span> Files<span class="token punctuation">.</span><span class="token function">createDirectory</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//建立多个目录</span> <span class="token comment">//Files.createDirectories(path);</span> <span class="token punctuation">}</span> <span class="token comment">//文件</span> Path path1 <span class="token operator">=</span> Paths<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"F:/helloFile.txt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>Files<span class="token punctuation">.</span><span class="token function">exists</span><span class="token punctuation">(</span>path1<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token comment">//若是不存在</span> Files<span class="token punctuation">.</span><span class="token function">createFile</span><span class="token punctuation">(</span>path1<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment">/** * 文件属性 */</span> <span class="token annotation punctuation">@Test</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">getFileProperties</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> IOException <span class="token punctuation">{<!-- --></span> Path path <span class="token operator">=</span> Paths<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"F:/测试数据.csv"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>Files<span class="token punctuation">.</span><span class="token function">getLastModifiedTime</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//最后修改时间:2019-05-22T02:52:45.625094Z</span> System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>Files<span class="token punctuation">.</span><span class="token function">getOwner</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//拥有者:DESKTOP-GE36VVD\87772 (User)</span> <span class="token comment">//System.out.println(Files.getPosixFilePermissions(path));//权限,非admin可能会报错</span> System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>Files<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//文件大小: 34207517</span> <span class="token punctuation">}</span> <span class="token comment">/** * 读取一个文本文件 */</span> <span class="token annotation punctuation">@Test</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">readText</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> IOException <span class="token punctuation">{<!-- --></span> Path path <span class="token operator">=</span> Paths<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"F:/test.txt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//经过bufferedReader读取</span> BufferedReader bufferedReader <span class="token operator">=</span> Files<span class="token punctuation">.</span><span class="token function">newBufferedReader</span><span class="token punctuation">(</span>path<span class="token punctuation">,</span> StandardCharsets<span class="token punctuation">.</span>UTF_8<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">///该文件编码是什么newBufferedReader就必须指定什么字符集,不然报错</span> StringBuilder sb <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">StringBuilder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> String tempString <span class="token operator">=</span> null<span class="token punctuation">;</span> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>tempString <span class="token operator">=</span> bufferedReader<span class="token punctuation">.</span><span class="token function">readLine</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">!=</span> null<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> sb <span class="token operator">=</span> sb<span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span>tempString <span class="token operator">+</span> <span class="token string">"\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>sb<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//经过Files方法readAllLines</span> List<span class="token generics function"><span class="token punctuation"><</span>String<span class="token punctuation">></span></span> strings <span class="token operator">=</span> Files<span class="token punctuation">.</span><span class="token function">readAllLines</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span><span class="token punctuation">;</span> strings<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span>System<span class="token punctuation">.</span>out<span class="token operator">:</span><span class="token operator">:</span>println<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * 拿到文件输入流 * * @throws IOException */</span> <span class="token annotation punctuation">@Test</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">getInputStream</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> IOException <span class="token punctuation">{<!-- --></span> Path path <span class="token operator">=</span> Paths<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"F:/test.txt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> InputStream inputStream <span class="token operator">=</span> Files<span class="token punctuation">.</span><span class="token function">newInputStream</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//转换字符流后在包装成缓冲流</span> BufferedReader bufferedReader <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BufferedReader</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">InputStreamReader</span><span class="token punctuation">(</span>inputStream<span class="token punctuation">,</span> <span class="token string">"UTF-8"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> StringBuilder sb <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">StringBuilder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> String tempString <span class="token operator">=</span> null<span class="token punctuation">;</span> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>tempString <span class="token operator">=</span> bufferedReader<span class="token punctuation">.</span><span class="token function">readLine</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">!=</span> null<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> sb <span class="token operator">=</span> sb<span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span>tempString <span class="token operator">+</span> <span class="token string">"\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>sb<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * 文件写操做 */</span> <span class="token annotation punctuation">@Test</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">writeFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> IOException <span class="token punctuation">{<!-- --></span> Path path <span class="token operator">=</span> Paths<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"F:/writeFile.txt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//获取写入流</span> BufferedWriter bufferedWriter <span class="token operator">=</span> Files<span class="token punctuation">.</span><span class="token function">newBufferedWriter</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//执行写入操做</span> String str <span class="token operator">=</span> <span class="token string">"write file test"</span><span class="token punctuation">;</span> bufferedWriter<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>str<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//关闭资源</span> bufferedWriter<span class="token punctuation">.</span><span class="token function">flush</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> bufferedWriter<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * 遍历一个文件夹 */</span> <span class="token annotation punctuation">@Test</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">traverseDirectory</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> IOException <span class="token punctuation">{<!-- --></span> Path path <span class="token operator">=</span> Paths<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"F:/test"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Stream<span class="token generics function"><span class="token punctuation"><</span>Path<span class="token punctuation">></span></span> list <span class="token operator">=</span> Files<span class="token punctuation">.</span><span class="token function">list</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span><span class="token punctuation">;</span> list<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span>p <span class="token operator">-</span><span class="token operator">></span> <span class="token punctuation">{<!-- --></span> System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span><span class="token function">getFileName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * 遍历文件树 */</span> <span class="token annotation punctuation">@Test</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">traverseTree</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> IOException <span class="token punctuation">{<!-- --></span> Path path <span class="token operator">=</span> Paths<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"F:/test/"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Stream<span class="token generics function"><span class="token punctuation"><</span>Path<span class="token punctuation">></span></span> walk <span class="token operator">=</span> Files<span class="token punctuation">.</span><span class="token function">walk</span><span class="token punctuation">(</span>path<span class="token punctuation">)</span><span class="token punctuation">;</span> walk<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span>path1 <span class="token operator">-</span><span class="token operator">></span> <span class="token punctuation">{<!-- --></span>
// System.out.println(path1.getRoot());//根目录
System.out.println(path1.getFileName());//文件名
// System.out.println(path1.getParent());//上级目录
// System.out.println(path1.getFileSystem());//文件系统
});
//还有种方式Files.walkFileTree()
}
<span class="token comment">/** * 文件复制 */</span> <span class="token annotation punctuation">@Test</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">copyFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> IOException <span class="token punctuation">{<!-- --></span> Path src <span class="token operator">=</span> Paths<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"F:/测试数据.csv"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Path dest <span class="token operator">=</span> Paths<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"F:/test/Copy测试数据.csv"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Files<span class="token punctuation">.</span><span class="token function">copy</span><span class="token punctuation">(</span>src<span class="token punctuation">,</span> dest<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * 读取权限见上面示例,设置权限 */</span> <span class="token annotation punctuation">@Test</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">writePermission</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> IOException <span class="token punctuation">{<!-- --></span> Path path <span class="token operator">=</span> Paths<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"F:/test/导出测试数据.xlsx"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Set<span class="token generics function"><span class="token punctuation"><</span>PosixFilePermission<span class="token punctuation">></span></span> permissionSet <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashSet</span><span class="token operator"><</span><span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> permissionSet<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>PosixFilePermission<span class="token punctuation">.</span>GROUP_WRITE<span class="token punctuation">)</span><span class="token punctuation">;</span> permissionSet<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>PosixFilePermission<span class="token punctuation">.</span>OWNER_EXECUTE<span class="token punctuation">)</span><span class="token punctuation">;</span> Files<span class="token punctuation">.</span><span class="token function">setPosixFilePermissions</span><span class="token punctuation">(</span>path<span class="token punctuation">,</span> permissionSet<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
/**
* 判断方法
* @throws IOException
*/
@Test
public void judge() throws IOException {
Path path1 = Paths.get(“f:\test”, “Copy测试数据.csv”);
Path path2 = Paths.get(“f:\测试数据.csv”);
// boolean exists(Path path, LinkOption … opts) : 判断文件是否存在
System.out.println(Files.exists(path2, LinkOption.NOFOLLOW_LINKS));//true
// boolean isDirectory(Path path, LinkOption … opts) : 判断是不是目录
//不要求此path对应的物理文件存在。
System.out.println(Files.isDirectory(path1, LinkOption.NOFOLLOW_LINKS));//false
// boolean isRegularFile(Path path, LinkOption … opts) : 判断是不是文件
// boolean isHidden(Path path) : 判断是不是隐藏文件
//要求此path对应的物理上的文件须要存在。才可判断是否隐藏。不然,抛异常。
// System.out.println(Files.isHidden(path1));
// boolean isReadable(Path path) : 判断文件是否可读
System.out.println(Files.isReadable(path1));//true
// boolean isWritable(Path path) : 判断文件是否可写
System.out.println(Files.isWritable(path1));//true
// boolean notExists(Path path, LinkOption … opts) : 判断文件是否不存在
System.out.println(Files.notExists(path1, LinkOption.NOFOLLOW_LINKS));//false
}
}
<span class="token comment">/** * StandardOpenOption.READ:表示对应的Channel是可读的。 * StandardOpenOption.WRITE:表示对应的Channel是可写的。 * StandardOpenOption.CREATE:若是要写出的文件不存在,则建立。若是存在,忽略 * StandardOpenOption.CREATE_NEW:若是要写出的文件不存在,则建立。若是存在,抛异常 */</span> <span class="token annotation punctuation">@Test</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">ioStream</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> IOException <span class="token punctuation">{<!-- --></span> Path path1 <span class="token operator">=</span> Paths<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"f:\\test"</span><span class="token punctuation">,</span> <span class="token string">"copyTest.txt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
// InputStream newInputStream(Path path, OpenOption…how):获取 InputStream 对象
InputStream inputStream = Files.newInputStream(path1, StandardOpenOption.READ);
// OutputStream newOutputStream(Path path, OpenOption…how) : 获取 OutputStream 对象
OutputStream outputStream = Files.newOutputStream(path1, StandardOpenOption.WRITE, StandardOpenOption.CREATE);
// SeekableByteChannel newByteChannel(Path path, OpenOption…how) : 获取与指定文件的链接,how 指定打开方式。
SeekableByteChannel channel = Files.newByteChannel(path1, StandardOpenOption.READ, StandardOpenOption.WRITE, StandardOpenOption.CREATE);
// DirectoryStream<Path> newDirectoryStream(Path path) : 打开 path 指定的目录
Path path2 = Paths.get(“f:\test”);
DirectoryStream<Path> directoryStream = Files.newDirectoryStream(path2);
Iterator<Path> iterator = directoryStream.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
五.FileTime对象
表示文件时间戳属性的值,可能会在设置文件最后更新属性时使用到:
栗子:
/** * 可能你要从文件属性中的FileTime或者到一个Date对象 */ Path pathObj = Paths.get("C:/a/b/c.txt"); BasicFileAttributes attrs = Files.readAttributes(pathObj, BasicFileAttributes.class); Data date = new Date(attrs.lastModifiedTime().toMillis());
/**
- 又或者可能你要人为地修改这个文件时间属性,须要一个FileTime
*/
Path path = Paths.get(“C:/a/b/c.txt”);
long time = System.currentTimeMillis();
FileTime fileTime = FileTime.fromMillis(time);
try{
Files.setAttribute(path, “basic:lastModifiedTime”, fileTime,LinkOption.NOFOLLOW_LINKS);
}catch (IOException e) {
System.err.println(e);
}