gpt4 book ai didi

java - NIO 的文件系统和路径与默认文件系统不一致

转载 作者:行者123 更新时间:2023-12-01 11:55:08 26 4
gpt4 key购买 nike

我正在创建一个文件系统来浏览 jar,以防对 jar 中的资源的访问。

然后我注意到,当创建一个新的文件系统时,它实际上在使用 Paths NIO 类时注册为默认文件系统。

但是 Filesystems.getDefaultSystem 不断返回硬盘常规磁盘。

为什么这种行为不一致且如此透明?当询问 myResources/myResource.txt 的相对路径时,如何询问 Paths 实际使用的文件系统?

  System.out.println("Default FS: "+FileSystems.getDefault().getClass().getName());

URI rscURI = Test.class.getClassLoader().getResource("folder").toURI();

try{ Paths.get(clURI).getFileSystem(); }
catch(FileSystemNotFoundException e){
System.out.println("A new Filesystem for "+clURI.getScheme()+" scheme is created.");
FileSystems.newFileSystem(clURI, Collections.emptyMap());
System.out.println("Default FS: "+FileSystems.getDefault().getClass().getName());

}
return Paths.get(rscURI)

最佳答案

您的回答已经掌握了要点;具有字符串参数的 Paths.get() 实际上与具有相同字符串参数的 FileSystems.getDefault().getPath() 严格等效。

现在,对于 URI,它取决于注册的文件系统提供程序,默认文件系统提供程序始终具有方案 file。 zip 文件系统提供程序具有方案 jar

现在,如果您为注册的提供程序指定 URI,该提供程序可能会也可能不会自动为您创建文件系统。

但请注意,FileSystem 实现了 Closeable,因此 AutoCloseable;因此,建议您掌握它并从中获取路径,以便在完成后可以正确关闭它。如果不这样做,您可能会泄漏资源!

关于java - NIO 的文件系统和路径与默认文件系统不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28515264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com