如何检查文件系统是否支持Java中的链接和符号链接
Java7中引入的类具有处理链接和符号链接的方法,但仅作为可选操作 在实际调用相应的方法之前,是否有任何方法可以在运行时确定文件系统是否支持这些操作,或者是否需要调用它们然后捕获异常如何检查文件系统是否支持Java中的链接和符号链接,java,file,filesystems,java-7,nio,Java,File,Filesystems,Java 7,Nio,Java7中引入的类具有处理链接和符号链接的方法,但仅作为可选操作 在实际调用相应的方法之前,是否有任何方法可以在运行时确定文件系统是否支持这些操作,或者是否需要调用它们然后捕获异常 类喜欢或似乎不包含这方面的任何内容(或者我忽略了它)。我看不到任何通用方法可以不依赖于不支持的操作异常或其他异常 您可以使用一种启发式方法,假设只有BasicFileAttributesView的子类支持符号链接 注意:以下方法不起作用,因为FileAttributeViews和文件属性不是相同的概念: 在OS
类喜欢或似乎不包含这方面的任何内容(或者我忽略了它)。我看不到任何通用方法可以不依赖于
不支持的操作异常或其他异常
您可以使用一种启发式方法,假设只有BasicFileAttributesView
的子类支持符号链接
注意:以下方法不起作用,因为FileAttributeViews
和文件属性不是相同的概念:
在OS X 10.8.4上,我没有将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) {}
}
}
原始答复:
如果您有文件存储的实例
,则可以使用
或者,如果您有一个文件系统的实例
,您可以检查由此产生的集合
是否包含字符串“isSymbolicLink”
您可以使用
获取文件系统的一种方法是通过
文档中说:UnsupportedOperationException-如果实现不支持符号链接,或者数组包含在创建符号链接时无法自动设置的属性,那么此属性可能会帮助您:@Akira这就是我所说的捕获异常;)嗯,令人惊讶的是,这似乎不适用于带有NTFS的win机器-认为它支持符号链接?稍后将在linux上试用…@shutefan,看起来你是对的,我的答案可能不是。它也不适用于OSX。不知道如何解决这个问题。我需要标记答案吗?我不想删除,这样其他人可以看到这种方法不起作用。谢谢尝试!我宁愿把答案留作参考,这样别人就不会白费力气了。在任何情况下,对于大多数实际用途,我打赌人们都可以使用supportsFileAttributeView
方法(请注意,没有文档记录这是为了抛出UnsupportedOperationException
),该方法采用FileAttributeView的名称,而不是文件属性的名称。这就是为什么它总是为你返回false。类似地,FileSystem.supportsFileAttributeViews
返回FileAttributeViews的名称,而不是文件属性的名称。有关这两种类型名称的说明,请参见。