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

发布于 2024-11-08 13:26:53 字数 916 浏览 0 评论 0原文

旧的、或多或少已弃用的 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。有人知道为什么它变得更复杂(比在 Path 上有一个简单的 exists 方法)吗?

The old, more or less deprecated java.io.File API had a method exists which returned true if the File pointed to an existing one in the file system, but I couldn't find any comparable method for 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  

Of course I could just convert the path back to a File but I guess there is a better way to do that.

Edit: OK, thanks to everyone pointing out Files.exists. Does someone know why it got more complicated (than having a simple exists method on Path)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

阿楠 2024-11-15 13:26:53

使用 Files 类:

Files.exists(path);

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

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

从 Oracle 读取 Javadocs在这里

Use the Files class:

Files.exists(path);

EDIT: to answer your subsequent question, I think the reason that the method is in another class is that Path is an interface, and they wanted to provide an implementation (similar to putting sorting methods in the Collections class instead of the List interface).

Not directly related to the question, but as per ratchet freak there is an optional varags argument to the method as well, which determines how symbolic links are handled

Read the Javadocs from Oracle here.

横笛休吹塞上声 2024-11-15 13:26:53

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

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

look in the utility class Files for the package:

Files.exists(Path path,LinkOption... options)
书间行客 2024-11-15 13:26:53

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

In the new file system API then all file operations are defined by the Files class. Mostly these operations are implemented in terms of other operations or they delegate to the appropriate file system provider. The Path interface on the other hand is where the path operations are defined. A Path is just the object that is used to locate a file. If you want to do operations on a file then you invoke the appropriate Files method, specifying the Path to locate the file.

自找没趣 2024-11-15 13:26:53

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

No need to add a new method for that: use Path.toFile() to get a file, then run exists on that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文