如何使用Java 7的新File API检查路径是否指向现有文件?

时间:2011-05-21 21:12:45

标签: java file path filesystems java-7

旧的,或多或少已弃用的java.io.File API有一个方法exists如果File指向文件系统中的现有方法,则返回true,但我找不到java.nio.file.Path的任何可比方法:

scala> import java.nio.file._
import java.nio.file._

scala> val path = Paths.get("/foo")
path: java.nio.file.Path = /foo

scala> path.
asInstanceOf     compareTo        endsWith         getFileName      getFileSystem    getName          getNameCount     
getParent        getRoot          isAbsolute       isInstanceOf     iterator         normalize        register         
relativize       resolve          resolveSibling   startsWith       subpath          toAbsolutePath   toFile           
toRealPath       toString         toUri  

当然我可以将path转换回File,但我想有更好的方法可以做到这一点。

编辑:好的,感谢大家指出Files.exists。有人知道为什么它变得更复杂(比在exists上使用简单的Path方法)?

4 个答案:

答案 0 :(得分:56)

使用Files类:

Files.exists(path);

编辑:为了回答你的后续问题,我认为该方法在另一个类中的原因是Path是一个接口,他们想提供一个实现(类似于在{{中放置排序方法) 1}}类而不是Collections接口)。

与问题没有直接关系,但根据棘轮怪,该方法还有一个可选的varags参数,它决定了符号链接的处理方式

Read the Javadocs from Oracle here

答案 1 :(得分:9)

在实用程序类Files中查找包:

Files.exists(Path path,LinkOption... options)

答案 2 :(得分:2)

在新文件系统API中,所有文件操作都由Files类定义。大多数情况下,这些操作是根据其他操作实现的,或者它们委托给相应的文件系统提供程序。另一方面,Path接口是定义路径操作的位置。 Path只是用于定位文件的对象。如果要对文件执行操作,则调用相应的Files方法,指定用于查找文件的路径。

答案 3 :(得分:0)

无需为此添加新方法:使用Path.toFile()获取文件,然后在其上运行exists