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

时间:2009-09-24 13:13:30

标签: java linux url sftp apache-commons-vfs

我们正尝试使用Apache Commons VFS通过SFTP访问某些内容。 It claims to support SFTP,但是我们在启动时会收到MalformedURLException。四处搜索我看到apache vfs正在使用java.net.URL。但是文档告诉我它实际上并不支持sftp://个网址。

  

以下协议的协议处理程序保证存在于搜索路径中: -

    http, https, ftp, file, and jar
     

也可以使用其他协议的协议处理程序。

我在Linux上使用java 1.6.0。如何在java.net.URL看到sftp://网址时阻止java.net.URL摆动?我需要继续使用Apache commons VFS库,它使用{{1}}。

5 个答案:

答案 0 :(得分:22)

请参阅commons-vfs要求sftp工作的dependencies列表。一旦JSch在类路径中,您的异常就不再发生了。有关通过sftp连接的示例,请查看Apache's Wiki

答案 1 :(得分:4)

我之前从未使用过VFS,但看起来你需要(至少)registerSFTP FileProvider.它看起来像需要这样的东西:

DefaultFileSystemManager fsm = ... /* Create and configure your FSM. */
fsm.addProvider("sftp", new SftpFileProvider());

通过configuration file syntax.

可能有办法做同样的事情

答案 2 :(得分:3)

查看this description有关如何实现新的URL协议处理程序的文档(该文档描述了LDAP类型的URL,但您应该能够将其概括为sftp方案)。

来自文件:

  

正如你所看到的,唯一的区别   两个例子之间是我们   在第二个中使用了LDAP URL   案件。但是,用于运行LDAP   样品您首先必须注册   IAIK-JCE的LDAP协议处理程序   告诉java.net URL框架   在哪里寻找LDAP支持   IAIK-JCE的课程

     

System.getProperties().put("java.protocol.handler.pkgs", "iaik.x509.net");

     

之后   注册了IAIK LDAP协议   处理程序,IAIK-JCE LdapURLConnection   调用时返回对象   url.openConnection用于LDAP URL。

(强调我的)

答案 3 :(得分:2)

我使用jsch来处理sftp和ssh。它不会帮助你防止来自java.net.URL的异常,但它会帮助你做sftp的东西。

答案 4 :(得分:1)

根据代码的结构方式,您可以在将字符串提供给URL解析方法之前删除s,设置标志,如果验证,请检查该标志并将其置回(如果已设置)。这很难看,但它会提供一种解决方法。