[英]How to check if filesystem supports links and symlinks in Java
Java 7中引入的Files類具有處理鏈接和符號鏈接的方法,但僅作為可選操作 。
有沒有辦法在運行時確定文件系統在實際調用相應方法之前是否支持這些操作,還是需要調用它們然后捕獲異常?
像FileSystem或FileStore這樣的類似乎沒有包含任何內容(或者我忽略了它)。
我沒有看到任何通用的方法,如果不依賴於UnsupportedOperationException
或其他一些異常將會工作。
您可以使用假設只有BasicFileAttributesView
子類支持符號鏈接的啟發式方法。
注意:下面的方法不起作用,因為FileAttributeViews
和文件屬性不是相同的概念:
我沒有將isSymbolicLink
作為受支持的屬性之一,在OS X 10.8.4上使用以下代碼:
package com.mlbam.internal;
import java.nio.file.Files;
import java.nio.file.FileStore;
import java.nio.file.FileSystems;
import java.nio.file.Paths;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MainClass {
private static final Logger LOG = LoggerFactory.getLogger(MainClass.class);
public static void main(String[] args) {
try {
System.out.println("FileStore.supportsFileAttributeView('isSymbolicLink'): "
+ Files.getFileStore(Paths.get("/")).supportsFileAttributeView("isSymbolicLink"));
// Got: FileStore.supportsFileAttributeView('isSymbolicLink'): false
System.out.println(FileSystems.getDefault().supportedFileAttributeViews());
// Got: [basic, owner, unix, posix]
} catch (Exception e) {}
}
}
原答案:
如果您有FileStore
的實例,則可以使用FileStore.supportsFileAttributeView("isSymbolicLink")
或者,如果您有FileSystem
的實例,則可以檢查FileSystem.supportedFileAttributeViews()
中生成的Set<String>
包含字符串"isSymbolicLink"
。
您可以使用Files.getFileStore(Path)
獲取與Path
關聯的FileStore
獲取FileSystem
一種方法是通過FileSystems.getDefault()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.