2009-05-21 163 views
4

我創建了一個普通文件,它沒有執行權限,但是當我使用此文件的路徑/名稱創建一個Java文件對象,然後調用File.canExecute()時,我得到的結果爲true,而我期望此方法調用返回假。有人能解釋我在這裏錯過了什麼嗎?在Java中File.canExecute()究竟做了什麼?

的Solaris:

$ touch /tmp/nonexecutable 
$ ls -l /tmp/nonexecutable 
-rw-r--r-- 1 root  root   0 May 21 07:48 /tmp/nonexecutable 

的Java:

String pathName = "/tmp/nonexecutable"; 
File myFile = new File(pathName); 
if (!myFile.canExecute()) 
{ 
    String errorMessage = "The file is not executable."; 
    log.error(errorMessage); 
    throw new RuntimeException(errorMessage); 
} 

在此先感謝您的幫助。

- 詹姆斯

回答

3

雖然我不是專家,這將不能正確回答你的問題,我想補充一點,這種行爲是不特定於Java。從查找(GNU的findutils)4.4.0手冊頁在我的Ubuntu 8.10安裝,關於-executable標誌:

匹配文件,這是 可執行的,哪些是目錄 搜索(在文件名分辨率 感)。這考慮了 訪問控制列表和-perm 測試忽略的其他 許可文物。這個測試使 使用access(2)系統調用, 的,因此可以通過NFS服務器 裏面做UID映射(或 根擠壓),因爲許多系統 被愚弄實現在客戶端的 內核access(2),所以不能使用 服務器上保存的UID映射信息。由於本次測試僅基於 access(2)系統調用的結果 ,沒有 保證了此 測試成功一個文件,其實是可以 執行

5

與Java無關 - 您以root身份運行,並且允許root設置所有內容,而不管權限如何。

+0

他的帖子中沒有任何內容表示他以root身份運行。 – JesperE 2009-05-21 08:42:03