我们正尝试使用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}}。
答案 0 :(得分:22)
请参阅commons-vfs要求sftp工作的dependencies列表。一旦JSch在类路径中,您的异常就不再发生了。有关通过sftp连接的示例,请查看Apache's Wiki。
答案 1 :(得分:4)
我之前从未使用过VFS,但看起来你需要(至少)register和SFTP FileProvider
.它看起来像需要这样的东西:
DefaultFileSystemManager fsm = ... /* Create and configure your FSM. */
fsm.addProvider("sftp", new SftpFileProvider());
可能有办法做同样的事情
答案 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,设置标志,如果验证,请检查该标志并将其置回(如果已设置)。这很难看,但它会提供一种解决方法。