Files Java 7 中引入的类具有处理链接和符号链接(symbolic link)的方法,但仅作为可选操作。
在实际调用相应方法之前,是否有任何方法可以在运行时确定文件系统是否支持这些操作,或者我是否需要调用它们然后捕获异常?
类似 FileSystem 的类或 FileStore在这方面似乎没有包含任何内容(或者我忽略了它)。
最佳答案
我看不到任何不依赖 UnsupportedOperationException
的通用方法。或其他一些异常(exception)。
您可以使用启发式方法,假设只有 BasicFileAttributesView
的子类支持符号链接(symbolic link)。
注意:以下方法无效,因为 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
的实例,您可以检查结果 Set<String>
来自 FileSystem.supportedFileAttributeViews()
包含字符串 "isSymbolicLink"
.
您可以获得FileStore
与 Path
相关联使用 Files.getFileStore(Path)
获取 FileSystem
的一种方法通过 FileSystems.getDefault()
关于java - 如何检查文件系统是否支持 Java 中的链接和符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19964600/