Java 7 中引入的Files类具有处理链接和符号链接的方法,但仅作为可选操作。
有没有办法在运行时确定文件系统在实际调用相应方法之前是否支持这些操作,或者我是否需要调用它们然后捕获异常?
FileSystem或FileStore之类的类似乎不包含这方面的任何内容(或者我忽略了它)。
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
,您可以检查结果Set<String>
from是否FileSystem.supportedFileAttributeViews()
包含 String "isSymbolicLink"
。
您可以获得FileStore
与Path
using关联的Files.getFileStore(Path)
获得的一种方法FileSystem
是通过FileSystems.getDefault()