问题实例化自定义java(nio)文件系统

时间:2015-12-27 04:37:29

标签: java nio

我正致力于基于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”。

3 个答案:

答案 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 ...