Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查文件系统是否支持Java中的链接和符号链接_Java_File_Filesystems_Java 7_Nio - Fatal编程技术网

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

如何检查文件系统是否支持Java中的链接和符号链接,java,file,filesystems,java-7,nio,Java,File,Filesystems,Java 7,Nio,Java7中引入的类具有处理链接和符号链接的方法,但仅作为可选操作 在实际调用相应的方法之前,是否有任何方法可以在运行时确定文件系统是否支持这些操作,或者是否需要调用它们然后捕获异常 类喜欢或似乎不包含这方面的任何内容(或者我忽略了它)。我看不到任何通用方法可以不依赖于不支持的操作异常或其他异常 您可以使用一种启发式方法,假设只有BasicFileAttributesView的子类支持符号链接 注意:以下方法不起作用,因为FileAttributeViews和文件属性不是相同的概念: 在OS

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

在实际调用相应的方法之前,是否有任何方法可以在运行时确定文件系统是否支持这些操作,或者是否需要调用它们然后捕获异常


类喜欢或似乎不包含这方面的任何内容(或者我忽略了它)。

我看不到任何通用方法可以不依赖于
不支持的操作异常或其他异常

您可以使用一种启发式方法,假设只有
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的名称,而不是文件属性的名称。有关这两种类型名称的说明,请参见。