首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

资料NIO学习体会

2013-07-26 
文件NIO学习体会??Files类是java.nio.file包的一个主要入口点,这个类提供了一系列静态的方法来读、写和操控

文件NIO学习体会

??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)

热点排行