36

旧的,或多或少不推荐使用java.io.File的 API 有一个方法exists,如果指向文件系统中的现有 API,则返回 true File,但我找不到任何可比较的方法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  

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

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

4

4 回答 4

60

使用Files类:

Files.exists(path);

编辑:为了回答您随后的问题,我认为该方法在另一个类中的原因是它Path是一个接口,并且他们想要提供一个实现(类似于将排序方法放在Collections类中而不是List接口中)。

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

在此处阅读 Oracle 的 Javadocs

于 2011-05-21T21:17:31.047 回答
9

查看包的实用程序类文件

Files.exists(Path path,LinkOption... options)
于 2011-05-21T21:19:47.913 回答
2

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

于 2011-05-24T07:52:13.137 回答
0

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

于 2011-05-21T21:15:47.997 回答