我正致力于基于link创建自定义文件系统。我创建了一个CustomFileSystemProvider
(以及其他CustomFileSystem类)并重写了所需的方法。 getScheme()
的{{1}}方法返回字符串“myfs”。
但是,当我尝试使用以下代码测试此文件系统时
CustomFileSystemProvider
我收到错误
FileSystem fs = FileSystems.newFileSystem(URI.create("myfs://a_remote_resource"), env);
我在java.nio.file.ProviderNotFoundException: Provider "myfs" not found
at java.nio.file.FileSystems.newFileSystem(FileSystems.java:341)
at java.nio.file.FileSystems.newFileSystem(FileSystems.java:276)
at Tester.main(Tester.java:30)
返回的列表中看不到我的自定义文件系统。我不确定我需要将自定义FS注册为“installedProvider”。
答案 0 :(得分:2)
按照FileSystems的Javadoc中的说明加载FileSystemProvider
:
使用服务提供程序加载加载已安装的提供程序 由ServiceLoader类定义的工具。已安装的提供商 使用系统类加载器加载。如果是系统类加载器 找不到扩展类加载器;如果有 没有扩展类加载器,然后使用bootstrap类加载器。 通常通过将提供程序放在JAR文件中来安装提供程序 应用程序类路径或扩展目录中的JAR文件 包含名为的provider-configuration文件 资源目录中的java.nio.file.spi.FileSystemProvider META-INF / services,文件列出一个或多个完全限定的 FileSystemProvider的具体子类的名称为零 参数构造函数
答案 1 :(得分:0)
您可以使用Google auto-service:
按如下方式注释FileSystemProvider实现类:
@AutoService(FileSystemProvider.class)
然后你不需要在META-INF中使用文件。
答案 2 :(得分:-3)
这是一个错误网址。将网址更改为标准网址。您还可以提供分析工具。
网址aURL =新网址(" http://java.sun.com:80/docs/books/tutorial" + " /index.html名称=联网#DOWNLOADING"?);
System.out.println(" protocol =" + aURL.getProtocol());
System.out.println(" authority =" + aURL.getAuthority()); System.out.println(" host =" + aURL.getHost());
System.out.println(" port =" + aURL.getPort());
System.out.println(" path =" + aURL.getPath());
System.out.println(" query =" + aURL.getQuery());
System.out.println(" filename =" + aURL.getFile());
System.out.println(" ref =" + aURL.getRef());
结果如:
ut:ut:protocol = http
ut:ut:authority = localhost:8080
ut:ut:host = localhost
ut:ut:port = 8080
ut:ut:path = /UT2.0/login.action
ut:ut:query = null
ut:ut:filename = /UT2.0/login.action
ut:ut:ref = null
如果您通过互联网操作文件,请选择一种协议,例如RPC,socket ...