![](/img/trans.png)
[英]Java: What is the best way to check if file needs to be updated before rewriting it?
[英]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.