java - 如何检查文件系统是否支持 Java 中的链接和符号链接(symbolic link)

标签 java file filesystems java-7 nio

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" .


您可以获得FileStorePath 相关联使用 Files.getFileStore(Path)

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


关于java - 如何检查文件系统是否支持 Java 中的链接和符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19964600/

相关文章:

c - 由于某些特定字符串(如 . 和 usr)的 dirname api 而发生段错误

jquery - 使用 jQuery 单击父 div 时打开文件对话框

python - 更改文件中的数字,无法使用 .split

node.js - 将目录存储在运行 node.js 脚本的变量中?

java - DailyRollingFileAppender,丢失前一天的数据

file - 在 QT 中只获取文件而不获取目录?

hadoop - 我可以在开发环境中使用没有 Hadoop 的 Spark 吗?

java - AspectJ 如何捕获 NoResultException 并返回 null

java - 帮助创建 Speex Voip 服务器和客户端

java - Ant 构建文件框架将 eclipse 项目变成 war ?