如何在Java中提取SFTP URL sftp://<user>@<host>[:<port>][/<directory>]

3
以下是属性文件中的SFTP配置,其中包含了所有属性在单行中的内容。
属性文件:
xyz.sftp=sftp://user@india123.systems.in:9090/<directory>

例子:

sftp://<user>@<host>[:<port>][/<directory>]

我希望解析它并从此URL中获取以下值:
  1. 用户
  2. 主机
  3. 端口
  4. 路径

1
你应该看一下Java中的正则表达式,我有一种预感它会对你有所帮助。 - The Law
你能帮我提供一个正则表达式的例子吗?因为我对它还不熟悉。谢谢! - aashishganesh
不,我不能。如果你不愿意自己学习新的东西,依赖别人为你做所有事情,那么你不适合成为一名程序员。我指引了你正确的方向,你如何运用我的建议取决于你自己。 - The Law
请访问https://regex101.com/(或类似的正则表达式辅助站点),将您的文本粘贴进去,开始学习一些正则表达式。让我来给您指导一下,`sftp\:\/\/(.*)@`将会捕获第一组中的用户名部分。 - ug_
非常感谢,我会查看您提供的正则表达式链接,并尝试遵循您的建议。 - aashishganesh
终于搞定了 :-) sftp://(.)@(.):([\d]+)(.*) 正在帮我提取所有属性 - aashishganesh
1个回答

4
您可以使用java.net.URI来解析URL:
String ss = "sftp://user@india123.systems.in:9090/some/path";

URI uri = new URI(ss);
System.out.printf("URI scheme '%s' user '%s' host '%s' port '%s' path '%s'\n",
        uri.getScheme(), uri.getUserInfo(), uri.getHost(),
        uri.getPort(), uri.getPath());

打印:

URI方案'sftp' 用户'user' 主机'india123.systems.in' 端口'9090' 路径'/some/path'

java.net.URL类具有类似的解析能力,但在这种情况下,它会抛出异常,因为它无法识别"sftp"方案。为了避免这种情况,您需要为该方案注册协议处理程序。注册协议处理程序似乎是相当痛苦的; 此页面描述了一种方法。


1
有没有办法让它识别sftp模式? - aashishganesh
如果我们这样使用会有问题吗: ss = ss.replace("sftp", "ftp"); URI uri = new URI(ss); - Mansingh Kachhi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接