2012-03-21 200 views
1

我試圖檢查文件是否可寫與否。我已經爲所有用戶自己更改了文件權限。但如果我嘗試運行該程序,它會顯示「真實」作爲響應。如果我允許權限,那麼它也顯示「真實」。File.canWrite不工作按預期

請告訴我是我的問題嗎?

try 
    { 

    File file = new File("D:/myproject_log/delivery_report_edr.out"); 

     if(!file.canWrite()) 
     { 
      System.out.println("you can't write!!!"); 
     } 
     else 
      System.out.println("you can write!!!"); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
+2

你還沒說你更改的權限*爲* ... – 2012-03-21 14:11:51

+0

你正在做的事情錯在你怎麼認爲你設置權限,您發佈的代碼應該按預期工作,如果權限設置是否正確。 – 2012-03-21 14:16:42

+0

誰是文件的所有者,誰在運行應用程序? – Woot4Moo 2012-03-21 14:36:30

回答

2

它工作正常。我複製了你的代碼並運行了兩次。首先我你可以寫,然後右擊該文件夾,進入屬性,然後選擇只讀並再次運行該程序,我得到你不能寫

所以按照文件的方法canWrite()它給了我預期的輸出。請再次確認您的設置並檢查。

+0

我在Windows操作系統中將權限更改爲「拒絕」。與我正在嘗試記錄我的條目相同的文件。但同時使用相同的文件創建記錄器,我得到異常說java.io.FileNotFoundException:d:\ myproject_log \ delivery_report_edr.out(訪問被拒絕) – 2012-03-21 14:29:48

+0

@ user1282551你可以說你是如何改變的權限? – 2012-03-21 14:31:35

+0

在Windows中,右鍵單擊該文件,然後進入屬性......在安全選項卡中,我已通過單擊「拒絕」選項更改了寫入權限。這是正確的方式嗎? – 2012-03-21 14:34:56

0

我也發現,File.canWrite()不能被信任,尤其是在網絡驅動器上,即使文件寫入失敗或反之亦然,通常返回true。我做了我自己的方法,實際上試圖寫一個虛擬文件到目錄。這是簡單的寫作和萬無一失。也許他們修正了它。

0

我曾與位於下的文件相同的問題:\ PROGRAMFILES \文件夾和File.canWrite方法返回真的,我居然也得到了同樣的異常。 當我更改寫入的權限允許爲在文件夾屬性的安全選項卡中定義的USER爲true時,它不給我例外。