簡體   English   中英

在java中檢查文件創建權限的最佳方法是什么

[英]What is the best way to check file creation permissions in java

我需要檢查特定目錄的文件創建權限。

我試過了:

try {
    AccessController.checkPermission(new FilePermission("directory_path", "write"));
    // Have permission
} catch (SecurityException e) {
    // Doesn't have permission
}

...但是這總是拋出SecurityException(據我所知,這檢查不是基礎fs權限,而是一些應該明確配置的JVM設置)。

另一種可能的方法是使用這樣的東西:

File f = new File("directory_path");
if(f.canWrite()) {
    // Have permission
} else {
    // Doesn't have permission
}

...但即使我無法在指定目錄中創建文件,這也會返回true(例如,當我在沒有管理員權限的用戶下運行我的應用程序時,我無法在“c:\\”中創建文件,但f.canWrite()返回true)。

最后我做了類似的黑客攻擊:

File f = new File("directory_path");
try {
    File.createTempFile("check", null, f).delete();

    // Have permission
} catch (IOException e) {
    // Doesn't have permission
}

...但這可能僅作為臨時解決方案,因為我需要獲得客戶端fs上幾乎所有文件夾的此類權限。

有沒有人知道如何很好地獲得REAL文件創建權限,而不會導致上述性能問題和黑客攻擊?

測試任何資源的可用性/可用性的最佳方法是嘗試使用它。 在這種情況下, new FileOutputStream(new File(dir, name)) 如果目錄不可寫,或者文件已經存在且不可寫等等,它將拋出IOException 。當您執行該代碼時,操作系統必須執行所有這些檢查:嘗試沒有意義要復制它,即使你100%正確,這是不可能的,你仍然會引入一個時序窗口,其中由於異步活動,之前的“真實”條件可能變為“假”。 你必須從文件創建中捕獲異常,並在catch塊中編寫代碼來處理它們:為什么要寫兩次所有這些?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM