如何检查文件系统是否支持Java中的链接和符号链接

时间:2013-11-13 21:20:42

标签: java file filesystems java-7 nio

Java 7中引入的Files类具有处理链接和符号链接的方法,但仅作为可选操作

有没有办法在运行时确定文件系统在实际调用相应方法之前是否支持这些操作,还是需要调用它们然后捕获异常?

FileSystemFileStore等类似乎没有包含任何内容(或者我忽略了它)。

1 个答案:

答案 0 :(得分:4)

在没有依赖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)

获取与FileStore相关联的Path

获取FileSystem的一种方法是通过FileSystems.getDefault()