2015-11-17 64 views
3

我使用下面的代碼來檢查文件是否存在,並可以用Java閱讀:Java中file.exists()的詳細信息?

File sourceFile = new File(sourcePath); 
if (!sourceFile.exists() || !sourceFile.canRead()) 
    throw new Exception("Source file is not accessible."); 

不過,我想解決的問題是確定更精細的細節有關爲什麼存在()可能或者可能不會返回錯誤。例如,該位置可能是可訪問的,但該文件不存在。或者,該位置可能被防火牆阻止,並且該文件確實存在,只是無法訪問。

是否有一個快速的方法之間做出判斷:

  • 文件位置是不可訪問(防火牆,安全等)
  • 位置是訪問,但文件d.n.e.
  • 文件存在但讀取未被授予。

謝謝!

回答

4

With File you can not。

隨着Path,您可以:

thePath.getFileSystem().provider().checkAccess(thePath) 

javadoc link

+0

貌似這個類可以提供我正在尋找的細節閱讀給定的文件。 – Paul

+0

嘗試路徑thePath = FileSystems.getDefault()。getPath(sourcePath); thePath.getFileSystem()。provider()。checkAccess(thePath,AccessMode.READ); } \t \t \t \t \t \t 趕上(NoSuchFileException EX1) { 拋出新的異常( 「源文件不存在。」); } 趕上(FileSystemException EX2) {\t \t \t \t \t \t \t //例:網絡路徑沒有被發現。 拋出新的異常(「源文件不可訪問:」+ ex2.getReason()); \t \t \t \t \t \t \t } 趕上(例外前){ 拋出新的異常( 「未知異常:」 + ex.getMessage()); } – Paul

+0

這就是我最後的結果。進入我的程序異常處理程序,但有更多的細節。 – Paul

0

下面的存在的方法和checkRead方法的代碼:

 public boolean exists() { 
     SecurityManager security = System.getSecurityManager(); 
     if (security != null) { 
      security.checkRead(path); 
     } 
     return ((fs.getBooleanAttributes(this) & FileSystem.BA_EXISTS) != 0); 
    } 

    public void checkRead(FileDescriptor fd) { 
     if (fd == null) { 
      throw new NullPointerException("file descriptor can't be null"); 
     } 
     checkPermission(new RuntimePermission("readFileDescriptor")); 
    } 

存在方法進行文件檢查讀取。

請參考以下鏈接,以便授予使用安全管理器

https://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html