java.nio.file.Path(Jdk7)与java.io.File比较

Path 类是jdk7新增加的特性之一,用来代替java.io.File类。

之所以新增这个类,是由于java.io.File类有很多缺陷:

1.java.io.File类里面很多方法失败时没有异常处理,或抛出异常,例如:

 java.io.File.delete()方法返回一个布尔值指示成功或失败但是没有失败原因。而java.nio.file.Files.delete(Path):

这个方法会抛出:NoSuchFileException,DirectoryNotEmptyException,IOException,SecurityException这样当删除一个文件失败时可以根据异常来查找失败原因。

例如:

运行结果:

2.java.io.File.rename(File file)方法在不同平台中运行时可能会有问题,这个方法不能将一个文件从一个文件系统移到另一个文件系统,这个方法的操作也不是原子性的,如果参数指定的文件名已经存在这个方法也可能执行失败:

上面这个类中,执行之后会发现,beforeRename1.txt依然还在,rename1.txt的文件内容也米有改变,而beforeRename2.txt文件已经被重命名为rename2.txt,而且rename2.txt的内容与beforeRename2.txt的内容一样 为“2222”。但是如果使用java.nio.Files.move(Path source, Path target, CopyOption… options)可以发现即使 rename3已经存在,也可以把beforeRename3.txt成功的重命名为rename3.txt

3. 读取文件属性相关

File类中读取文件属性都是一个方法返回一个属性值,而没有能够直接一次返回很多属性的方法,造成访问文件属性时效率的问题。

但是对于jkd7新增的api中可以批量读取文件属性,而且可以访问到文件更详细的属性。

除了以上还有其它一些问题,例如file.list();方法在处理比较大的目录时效率很低,但是为什么效率低?而java.nio.file是怎样优化的呢?没搞清楚………

 

转自:http://grapes-peng.iteye.com/blog/1882917