簡體   English   中英

如何檢查文件系統是否支持Java中的鏈接和符號鏈接

[英]How to check if filesystem supports links and symlinks in Java

Java 7中引入的Files類具有處理鏈接和符號鏈接的方法,但僅作為可選操作

有沒有辦法在運行時確定文件系統在實際調用相應方法之前是否支持這些操作,還是需要調用它們然后捕獲異常?

FileSystemFileStore這樣的類似乎沒有包含任何內容(或者我忽略了它)。

我沒有看到任何通用的方法,如果不依賴於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)獲取與Path關聯的FileStore

獲取FileSystem一種方法是通過FileSystems.getDefault()


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM