Java 7 重新设计file I/O实现 重构原有代码吧!
为什么要使用Java 7的file I/O实现
在Java 7以前,java.io.File类提供了file I/O实现。但其有很多缺点:
许多方法失败时不会抛出异常,因此也就不可能提供更多有用的信息为客户端提供帮助。比如,一个文件删除失败,客户端不知道是否存在,还是没有权限,还是其他问题导致。重命名不能跨平台保持一致性。对symbolic links没有真正的支持。对元数据没有更多的支持,比如,文件权限,拥有者,其他的安全属性。访问文件系统是低效的。大部分方法不可扩展。在服务器上请求一个大目录列表可能会导致挂起。大目录也可能导致内存资源问题,导致服务拒绝。如果出现symbolic links循环引用,不能写出一个可靠的递归文件树代码,也不能得到合适的响应。Java 7的file I/O API的关键入口
在java.nio.file包中
Path类,代表文件系统的一个文件或一个目录。提供的方法可以用于操作一个抽象的路径。
Paths类,工具类,通过一个路径字符串获取到一个依赖特定系统的Path对象。Files类,提供了具体操作文件或目录的方法。比如,删除,创建,拷贝,获取文件或目录元数据等。
FileSystem类,提供获取文件系统相关的方法。比如,通过一个路径字符串获取到一个依赖特定系统的Path对象;可以获取文件系统的所有的文件存储。FileStore类,一个文件系统有多个文件存储,FileStore代表底层的存储设备,比如设备,分区等。在Unix操作系统中,每一个装载的文件系统都是一个FileStore;而在Windows操作系统中,每一个卷代表一个FileStore,如C:,D:。重构
原来的代码中使用java.io.File类,现在想要利用java.nio.file包中的新功能Path input = file.toPath();
将原有的java.io.File实例转换为java.nio.file.Path实例。然后就可以利用Path和Files来操作文件或目录。
如果你不想使用第一种方法,或并不完全满足需求,那就重写file I/O相关的代码。