1

Files.getFileStore()驱动器上调用时(在 Windows 上),这会导致以下错误:

The directory is not a subdirectory of the root directory

例如:

subst P: C:\temp

跑步:

public static void main(String[] args) throws IOException {
    final Path dir = Paths.get("P:/sub");
    final FileStore fileStore = Files.getFileStore(dir);
    fileStore.isReadOnly();
}

结果是:

Exception in thread "main" java.nio.file.FileSystemException: P:\sub: The directory is not a subdirectory of the root directory.

    at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
    at sun.nio.fs.WindowsFileStore.create(WindowsFileStore.java:92)
    at sun.nio.fs.WindowsFileSystemProvider.getFileStore(WindowsFileSystemProvider.java:482)
    at java.nio.file.Files.getFileStore(Files.java:1411)
    at utils.FileStoreMain.main(FileStoreMain.java:16)

如何解决这个问题并获得适当FileStoreP:

4

2 回答 2

2

查看此错误报告JDK-8034057Alan Bateman的相关回答。

于 2015-11-26T17:37:06.983 回答
0

问题是“替代驱动器”不是文件存储。它只是将驱动器号与现有驱动器上的路径相关联。

你做了:

subst p: c:\temp

这意味着,实际上,您的真实文件存储p:\sub是与 c: 关联的驱动器。

注意:这只是一个假设,我实际上并没有运行 Windows。但是,如果您尝试遍历文件存储(即,通过调用.getFileSystem().getFileStores()您的Path实例),则 P: 将不会出现。

现在,问题仍然是如何获得真正的文件存储,如果可能的话。也许FileAttributeView存在可以为您提供此信息;尝试使用以下代码查看您可以使用哪些属性视图及其参数:

// using some Path instance named path...
final FileSystem fs = path.getFileSystem();
final Set<String> viewNames = fs.supportedFileAttributesView();

for (final String viewName: viewNames) {
    System.out.println("View " + viewName + ':');
    System.out.println(Files.readAttributes(path, viewName + ":*"));
}

也许存在您正在寻找的信息的视图......但不能保证。

于 2015-11-26T14:28:53.660 回答