在 substed 驱动器(在Windows上)上调用Files.getFileStore()
时,会导致以下错误:
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)
如何解决此问题并获得FileStore
的适当P:
?
答案 0 :(得分:2)
查看此错误报告JDK-8034057以及Alan Bateman的相关答案。
答案 1 :(得分:1)
问题在于"子网络驱动器"不是文件存储;它只是将驱动器号与现有驱动器上的路径相关联。
你做了:
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 + ":*"));
}
也许存在您正在寻找的信息的视图......但不保证。