此教程是针对JDK 8编写的。本页面描述的示例和实践不利用后续版本引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及后续版本中更新的语言特性摘要。
请参阅JDK发布说明,了解所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息。
在Java SE 7发布之前,java.io.File
类是文件I/O的机制,但它有一些缺点。
rename
方法在不同平台上的工作不一致。File
方法不具备可扩展性。在服务器上请求大型目录列表可能导致程序挂起。大型目录还可能导致内存资源问题,从而造成拒绝服务。也许您有使用java.io.File
的旧代码,并希望在对代码的影响最小的情况下利用java.nio.file.Path
功能。
java.io.File
类提供了toPath
方法,可以将旧的File
实例转换为java.nio.file.Path
实例,如下所示:
Path input = file.toPath();
然后,您可以利用Path
类提供的丰富功能集。
例如,假设您有一些删除文件的代码:
file.delete();
您可以修改此代码,使用Files.delete
方法,如下所示:
Path fp = file.toPath(); Files.delete(fp);
反过来,Path.toFile
方法可以为Path
对象构造一个java.io.File
对象。
因为Java SE 7版本中的文件I/O实现已经完全重构,所以不能仅仅将一个方法替换为另一个方法。如果您想使用java.nio.file
包提供的丰富功能,最简单的解决方案是按照前一节中建议的使用File.toPath
方法。但是,如果您不想使用该方法或者该方法不能满足您的需求,您必须重写文件I/O代码。
这两个API之间并没有一对一的对应关系,但是下表给出了java.io.File
API中的功能与java.nio.file
API中的功能的大致对应关系,并告诉您可以在哪里获取更多信息。
java.io.File 功能 | java.nio.file 功能 | 教程覆盖范围 |
---|---|---|
java.io.File |
java.nio.file.Path |
Path 类 |
java.io.RandomAccessFile |
The SeekableByteChannel 功能。 |
随机访问文件 |
File.canRead , canWrite , canExecute |
Files.isReadable , Files.isWritable , 和 Files.isExecutable 。在UNIX文件系统上,使用 管理元数据(文件和文件存储属性) 包检查九个文件权限。 |
检查文件或目录 管理元数据 |
File.isDirectory() , File.isFile() , 和 File.length() |
Files.isDirectory(Path, LinkOption...) , Files.isRegularFile(Path, LinkOption...) , 和 Files.size(Path) |
管理元数据 |
File.lastModified() 和 File.setLastModified(long) |
Files.getLastModifiedTime(Path, LinkOption...) 和 Files.setLastMOdifiedTime(Path, FileTime) |
管理元数据 |
The File 方法设置各种属性:setExecutable , setReadable , setReadOnly , setWritable |
这些方法被 Files 方法 setAttribute(Path, String, Object, LinkOption...) 替代。 |
管理元数据 |
new File(parent, "newfile") |
parent.resolve("newfile") |
路径操作 |
File.renameTo |
Files.move |
移动文件或目录 |
File.delete |
Files.delete |
删除文件或目录 |
File.createNewFile |
Files.createFile |
创建文件 |
File.deleteOnExit |
在 createFile 方法中指定的 DELETE_ON_CLOSE 选项替代。 |
创建文件 |
File.createTempFile |
Files.createTempFile(Path, String, FileAttributes<?>) , Files.createTempFile(Path, String, String, FileAttributes<?>) |
创建文件 通过流I/O创建和写入文件 使用通道I/O读取和写入文件 |
File.exists |
Files.exists 和 Files.notExists |
验证文件或目录的存在 |
File.compareTo 和 equals |
Path.compareTo 和 equals |
比较两个路径 |
File.getAbsolutePath 和 getAbsoluteFile |
Path.toAbsolutePath |
转换路径 |
File.getCanonicalPath 和 getCanonicalFile |
Path.toRealPath 或 normalize |
转换路径(toRealPath )从路径中删除冗余( normalize ) |
File.toURI |
Path.toURI |
转换路径 |
File.isHidden |
Files.isHidden |
检索关于路径的信息 |
File.list 和 listFiles |
Path.newDirectoryStream |
列出目录的内容 |
File.mkdir 和 mkdirs |
Files.createDirectory |
创建目录 |
File.listRoots |
FileSystem.getRootDirectories |
列出文件系统的根目录 |
File.getTotalSpace , File.getFreeSpace , File.getUsableSpace |
FileStore.getTotalSpace , FileStore.getUnallocatedSpace , FileStore.getUsableSpace , FileStore.getTotalSpace |
文件存储属性 |