Java 7引入的Files类具有处理链接和符号链接的方法,但仅作为可选操作。
在实际调用相应方法之前,是否有任何方法可以在运行时确定文件系统是否支持这些操作,还是需要调用它们然后捕获异常?
FileSystem或FileStore等类似类似似乎没有包含任何相关内容(或者我可能已经忽略了)。
Java 7引入的Files类具有处理链接和符号链接的方法,但仅作为可选操作。
在实际调用相应方法之前,是否有任何方法可以在运行时确定文件系统是否支持这些操作,还是需要调用它们然后捕获异常?
FileSystem或FileStore等类似类似似乎没有包含任何相关内容(或者我可能已经忽略了)。
FileAttributeViews
和文件属性并不是相同的概念:isSymbolicLink
作为支持的属性之一。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()
。
Files.isSymbolicLink(Path)
(请注意,这并没有记录为抛出 UnsupportedOperationException
)。 - yegeniysupportsFileAttributeView
方法需要 FileAttributeView 的名称,而不是文件属性的名称。这就是为什么它总是返回 false。同样,FileSystem.supportsFileAttributeViews 返回 FileAttributeViews 的名称,而不是文件属性的名称。请参见 Files.getAttribute
以了解两种类型名称的说明。 - VGR