繁体   English   中英

Commons VFS和Java.net.URL-添加对“ ram://”协议的支持

[英]Commons VFS and Java.net.URL - Adding support for “ram://” protocol

我正在使用commons-vfs ,为了进行测试,我想使用ram文件系统。 当我尝试使用new URL("ram:///A/B/sample.jar") ,出现以下异常:

java.net.MalformedURLException: unknown protocol: ram
    at java.net.URL.<init>(URL.java:592)
    at java.net.URL.<init>(URL.java:482)
    at java.net.URL.<init>(URL.java:431)

这是一些代码(当我使用文件协议时,一切正常

// URL is used to construct an object
obj.addArchive(new URL("ram:///A/B/sample.jar"))    
...
// then VFS is used to scan the object urls
// for instance get the parent directory
FileSystemManager manager = VFS.getManager();
String directory = manager.resolveFile(obj.getPath()).getParent().getURL().toExternalForm();

我如何在java.net.URL使用ram协议?

我发现基于使用的定制解决方案URL处理器所描述这里

url-scheme-registry添加一个maven依赖

<dependency>
    <groupId>org.skife.url</groupId>
    <artifactId>url-scheme-registry</artifactId>
    <version>0.0.1</version>
</dependency>

ram模式创建一个自定义URLStreamHandler

public class RamHandler extends URLStreamHandler { 
  @Override
  protected URLConnection openConnection(final URL u) throws IOException {
    //May instead use VFS DefaultURLConnection
    return new URLConnection(u) {
      @Override
      public void connect() throws IOException {}

      @Override
      public InputStream getInputStream() throws IOException {
        FileSystemManager fsManager = VFS.getManager();
        FileObject entry = fsManager.resolveFile(u.toExternalForm());
        FileContent content = entry.getContent();
        return content.getInputStream();
      }
    };
  }
}

这样就不会有格式错误的url异常:

UrlSchemeRegistry.register("ram", RamHandler.class);
URL url = new URL("ram:///A/B/sample.jar");

VFS支持创建一个流处理程序工厂,该工厂知道所有已注册的方案。

// you might want to configure a manager with less schemes
FileSystemManager fsm = VFS.getManager(); 
URLStreamHandlerFactory factory = fsm.getURLStreamHandlerFactory();
URL.setURLStreamHandlerFactory(factory); // VM global
URL url = new URL("ram://test.txt");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM