16

我们正在尝试使用Apache Commons VFS通过 SFTP 访问某些内容。它声称支持 SFTP ,但是当它启动时我们会收到MalformedURLException 。挖掘我发现 apache vfs 正在使用java.net.URL. 但是文档告诉我它实际上并不支持sftp://URL。

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

    http, https, ftp, file, and jar

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

我在 Linux 上使用 java 1.6.0。java.net.URL当它看到一个sftp://URL时,我怎样才能防止它出现摇晃?我需要继续使用 Apache commons VFS 库,它使用java.net.URL.

4

5 回答 5

23

请参阅commons-vfs 需要 sftp 工作的依赖项列表。一旦JSch在类路径中,您的异常将不再发生。查看Apache 的 Wiki,了解通过 sftp 连接的示例。

于 2009-09-24T14:08:37.360 回答
4

我以前从未使用过 VFS,但看起来你需要(至少)注册一个SFTP FileProvider 看起来它需要类似的东西:

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

可能有一种方法可以通过配置文件语法来做同样的事情。

于 2009-09-24T13:36:50.023 回答
3

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

从文件:

如您所见,这两个示例之间的唯一区别是我们在第二种情况下使用了 LDAP URL。但是,为了运行 LDAP 示例,您首先必须注册 IAIK-JCE 的 LDAP 协议处理程序,以告诉 java.net URL 框架在哪里查找IAIK-JCE 的 LDAP 支持类:

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

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

(强调我的)

于 2009-09-24T13:32:07.453 回答
2

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

于 2009-09-24T13:18:51.630 回答
1

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

于 2009-09-24T13:19:42.987 回答