我正在尝试创建一个FileSystem
对象来保存ext2文件系统。我的URI
似乎无效,给我一个路径组件应该是'/'运行时错误。
我正在使用Windows并在Eclipse中拥有我的项目,其中包含一个名为“fs”的子目录,用于保存文件系统映像。
我的代码......
URI uri = URI.create("file:/C:/Users/Rosetta/workspace/filesystemProject/fs/ext2");
/* uri holds the path to the ext2 file system itself */
try {
FileSystem ext2fs = FileSystems.newFileSystem(uri, null);
} catch (IOException ioe) {
/* ... code */
}
我已将文件系统加载为File
对象,并使用getURI
方法确保我的URI
与实际的URI
相同,而且确实如此。
如何加载文件系统?
编辑:
下面的堆栈跟踪
Exception in thread "main" java.lang.IllegalArgumentException: Path component should be '/'
at sun.nio.fs.WindowsFileSystemProvider.checkUri(Unknown Source)
at sun.nio.fs.WindowsFileSystemProvider.newFileSystem(Unknown Source)
at java.nio.file.FileSystems.newFileSystem(Unknown Source)
at java.nio.file.FileSystems.newFileSystem(Unknown Source)
答案 0 :(得分:6)
WindowsFileSystemProvider检查URI的路径是否只是'/'。 uri作为URI完全有效,问题是FileSystem的必需品。 crashystar是正确的(我还不能发表评论)并且应该使用Path。 如果您阅读newFileSystem(Path,ClassLoader)的JavaDoc,您将看到ClassLoader可以保留为null,因此您只需要执行
Path path = Paths.get("C:/Users/Rosetta/workspace/filesystemProject/fs/ext2");
FileSystem ext2fs = FileSystems.newFileSystem(path, null);
将其保留为null Java尝试查找已安装的提供程序(因此您不能指望使用自定义提供程序)。如果它是自定义提供程序,则必须使用可以加载该提供程序的ClassLoader。如果提供者在您的类路径上,那就足够了
getClass().getClassLoader()
由于您说您只想让操作系统执行此操作,请将其保留为空。
答案 1 :(得分:4)
为什么不使用Path对象?
newFileSystem(Path path, ClassLoader loader)
Constructs a new FileSystem to access the contents of a file as a file system.
注意三个构造函数:
static FileSystem newFileSystem(Path path, ClassLoader loader)
Constructs a new FileSystem to access the contents of a file as a file system.
static FileSystem newFileSystem(URI uri, Map<String,?> env)
Constructs a new file system that is identified by a URI
static FileSystem newFileSystem(URI uri, Map<String,?> env, ClassLoader loader)
Constructs a new file system that is identified by a URI
答案 2 :(得分:1)
你可以试试这个:
URI uri = URI.create("jar:file:/C:/Users/Rosetta/workspace/filesystemProject/fs/ext2");