Files类是java.nio.file包的一个主要入口点,这个类提供了一系列静态的方法来读、写和操控文件或目录,Files的方法工作在Path对象的实例上。
- 检测文件或目录
验证一个文件或目录是否存在可以使用exists(Path path,LinkOption[] option)和notExists(Path path,LinkOption[] option)。需要注意的是验证一个文件是否存在可能有三种结果
- 文件存在
- 文件不存在
- 文件状态未知,无法验证
因此,我们不能认为!exists(Path path)与notExists(Path path)是相等的
- 检测文件的可访问性
我们可以使用isReadable(Path path)、isWritable(Path path)和isExcutable(Path path)来判断一个文件是否可读、可写和可执行。例如:
Path file = ...;
boolean isRegularExecutableFile = Files.isRegularFile(file) &
Files.isReadable(file) & Files.isExecutable(file);
-
检测两个路径是否定位了同样的文件
在文件系统中,我们有时需要判断2个路径是否指定了同样的文件,我们可以使用isSameFile(Path path1,Path path2)方法来进行判断。:
-
删除文件或目录
当我们需要删除一个文件或目录时,新NIO的Files提供了2个方法来完成这个目的
- 使用delete(Path path),如果删除的文件不存在或删除的目录中包含文件都会抛出NoSuchFileException或DirectoryNotEmptyException。例如:
try {
Files.delete(path);
} catch (NoSuchFileException x) {
System.err.format("%s: no such" + " file or directory%n", path);
} catch (DirectoryNotEmptyException x) {
System.err.format("%s not empty%n", path);
} catch (IOException x) {
// File permission problems are caught here.
System.err.println(x);
}
2、使用deleteIfExists(path)方法删除文件或目录,即使文件存在也被会抛出异常。
-
拷贝文件或目录
文件类提供了copy(Path path1,Path path2,CopyOption[] option)来实现文件或目录的拷贝,当目标文件存在时是否抛出异常要根据CopyOption枚举值来确定
其枚举值的定义如下:
REPLACE_EXISTING:该选项表示,即使目标文件存在也执行拷贝,如果要拷贝的是符号链接(Symbolic link)链接本身被拷贝,而链接的目标不会被拷贝,如果拷贝到一个非空目录,FileAlreadyExistsException异常被抛出
COPY_ATTRIBUTES:该选项表示拷贝源文件相关的所有属性到目标文件,目标文件是否具有源文件拷贝过来的属性取决于相应的系统或平台,但是最后修改时间总是可以正确拷贝,它是跨平台的。
NOFOLLOW_LINKS:该选项主要用于符号链接(Symbolic link),拷贝的是链接本身,而被是链接的目标。
此外,文件类还提供了用于文件与流之间的拷贝的方法:copy(InputStream in,Path path,CopyOption[] option)该方法用于拷贝输入流到文件,copy(Path path,OutputStream out)该方法用于拷贝文件到输出流
-
移动文件或目录
我们能使用Move(Path path1,Path path2,CopyOption[] option)方法来移动文件或目录,如果目标文件已经存在,是否抛出异常与传递进来的CopyOptin标志有关,空目录和包含文件的目录都可以用该方法来进行移动,只是
包含文件的目录移动后不再包含文件
StandardCopyOption参数的含义如下:
REPLACE_EXISTING: 该选项表示目标文件如果存在继续进行移动并替换,如果移动的是符号链接(Symbolic link),链接会被替换到指向原目标。
ATOMIC_MOVE:该选项顾名思义,就是操作要么正确完成,要么失败,不可能部分完成。
import static java.nio.file.StandardCopyOption.*;
…...
Files.move(source, target, REPLACE_EXISTING);
下一篇文章我们将学习元数据管理(manageing metadata)
相关推荐
Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据...
JAVA NIO学习资料JAVA NIO学习资料
java_nio学习文档
适合于文件小但数量比较大的文件传输 传输速度比传统的流IO要快很多,刚接触nio不久,希望有朋友能对它再进行优化,相信很多项目里用的上
java nio 写文件,java nio 写文件
java nio 读文件,java nio 读文件
本类,是专门为了处理大文件,按行读取开发的类。 采用读文件的缓存 fbb 1024*5 行缓存 bb 256 字节 设计思想: 每次通过nio读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件...
NIO 处理大文件
java nio 写文件样例,java写大数据文件时提高性能
Java NIO学习资料+代码.zip
本类,是专门为了处理大文件,按行读取开发的类。 采用读文件的缓存 fbb 1024*5 行缓存 bb 256 字节 设计思想: 每次通过nio读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件结束 ...
使用nio byteBuffer 实现按行读取文件(大文件) 在window/linux/macOS上均测试通过 对于中文乱码也已处理成功 完整注释,可随需求更改 有问题请邮件:mly610865580@126.com
简单的用Java的NIO读取文件的程序,给大家参考。
利用NIO中的类进行开发的文件复制实例,学习下类的使用
nio 学习 demo 解决沾包问题 处理因缓冲区满导致写入失败问题 处理因缓冲区满导致写入失败问题 ,代码里面应该在写文件结束后取消掉注册的事件
JAVA NIO 简单PFT 文件服务 上传 下载 列表
回味Java基础之NIO!!!
nio学习文档及示例代码,轻松掌握nio
Nio学习笔记
JAVA_NIO学习总结J