2011-05-21 24 views
26

老,或多或少棄用java.io.File API有方法exists如果File指出,在文件系統中現有的這回真的,但我無法找到任何java.nio.file.Path可比方法:如何使用Java 7的新File API檢查路徑是否指向現有文件?

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方法)?

回答

46

使用Files類:

Files.exists(path);

編輯:回答你後面的問題,我認爲,該方法是在另一大類原因是Path是一個接口,他們想提供實現(類似於將排序方法放入Collections類而不是List接口)。

不直接相關的問題,但按照棘輪怪物有一個可選的varags參數方法以及,它決定如何鏈接符號被處理

Read the Javadocs from Oracle here

+0

是。而已。 +1 – aioobe 2011-05-21 21:18:15

+0

所以基本上它確保只有一個實現(由Oracle提供)在'Files'中的方法,並且可能有幾個不同,如果它在'Path'中定義,那麼這將是可能的? – soc 2011-05-21 23:13:43

+0

是的,我想這就是原因。只有一個實現,並且獨立於'Path'實現。 – OpenSauce 2011-05-22 11:22:27

0

無需爲此添加新方法:使用Path.toFile()獲取文件,然後在該文件上運行exists

+2

這不正是我所說的,提到必須有更好的方法嗎? :-) – soc 2011-05-21 21:16:46

+0

啊。所以你反對不得不逐步解決這個問題。那麼,你可以嘗試使用'toRealPath()',如果文件不存在,我相信它會拋出IOException? – Femi 2011-05-21 21:18:43

9

看在該包的實用工具類Files

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

在新的文件系統API則所有的文件操作是通過文件類定義的。大多數情況下,這些操作是通過其他操作來實現的,或者委託給相應的文件系統提供者。另一方面,路徑接口是定義路徑操作的地方。路徑就是用來定位文件的對象。如果你想對一個文件進行操作,那麼你可以調用適當的Files方法,指定Path來定位文件。

相關問題