java中如何从一个url的字符串中提取出ip、port等信息

欢迎访问个人博客 德鲁大叔撸代码
项目中有一个功能是:把我生成的对账单推送到商户指定的sftp服务器上,要上传文件到sftp那必须的就有以下几个数据:
①sftp的ip
②sftp所指向的port
③sftp的用户名
④sftp的密码
⑤指定sftp上文件的存放路径

正常情况下,以上的信息需要在商户配置对账单推送权限的时候进行录入,那我需要做的只是去数据库中查询上述信息就可以,但是!!!因为涉及到的这张表是其他团队维护的,而且他们对于商户从页面传过来的数据不进行校验,直接进行落库操作。这就出现了以上5种数据可能完全包含在一个address的字段中,那我就需要去上面的address中获取我需要的5种数据。
常见的address有下面两种类型:
在这里插入图片描述
第一种:address中包含用户信息(上面的5中数据都包含)
第二种:address中不包含用户信息(只包含前面的①②⑤)

接下来就是如何从上面的address中获取我需要的信息了,第一个想到的是用正则表达式来截取,但无奈不会使用正则,那只能寻求其他的解决方法了。
查看了java8的官方API,发现我可以利用该address创建一个URL对象,然后再从当前URL对象中获取我需要的数据
关于URL,官方API中的描述如下:Class URL表示统一资源定位符,指向万维网上的“资源”的指针。
常用的构造方法有:
java中如何从一个url的字符串中提取出ip、port等信息_第1张图片
常用的方法有:
java中如何从一个url的字符串中提取出ip、port等信息_第2张图片
正常情况下,一个URL会包含下面三种信息:
protocol - 要使用的协议的名称。
host - 主机的名称。
port - 主机上的端口号。
例如:
http://47.102.220.5:8080/testt中
http 就是protocol 的值 它表示当前URL表示要使用的协议是http (超文本传输协议)
47.102.220.5 就是host的值
8080 就是port的值t

读完了官方API关于URL类的说明,那从一个address中获取我需要的数据就可以说是易如反掌了,下面是具体的代码演示:
第①中情况 :address中包含用户信息

public void getSftpInfo() {
        String ftpAddr = "ftp://kyrie:[email protected]:22/app/CIB_FAST_F0L1/nsposm/qkf";  //address中包含用户名和密码
        try {
            URL url = new URL(ftpAddr);
            String userInfo = url.getUserInfo();
            System.err.println("用户信息:" + userInfo);
            if (userInfo != null) {
                int index = userInfo.indexOf(":");
                String userName = userInfo.substring(0, index);
                System.err.println("用户名:" + userName);
                String password = userInfo.substring(index + 1);
                System.err.println("密码:" + password);
            }
            int port = url.getPort();
            System.err.println("端口号:" + port);
            String host = url.getHost();
            System.err.println("host:" + host);
            String path = url.getPath();
            System.err.println("远程路径:" + path);
        } catch (MalformedURLException e) {
            log.info("创建url对象异常,异常信息:{}", e.getMessage());
        }
    }

运行结果:

java中如何从一个url的字符串中提取出ip、port等信息_第3张图片
第②中情况 :address中不包含用户信息

public void getSftpInfo() {
        String ftpAddr = "ftp://192.158.0.74:22/app/CIB_FAST_F0L1/nsposm/qkf";  //address中包含用户名和密码
        try {
            URL url = new URL(ftpAddr);
            String userInfo = url.getUserInfo();
            System.err.println("用户信息:" + userInfo);
            if (userInfo != null) {
                int index = userInfo.indexOf(":");
                String userName = userInfo.substring(0, index);
                System.err.println("用户名:" + userName);
                String password = userInfo.substring(index + 1);
                System.err.println("密码:" + password);
            }
            int port = url.getPort();
            System.err.println("端口号:" + port);
            String host = url.getHost();
            System.err.println("host:" + host);
            String path = url.getPath();
            System.err.println("远程路径:" + path);
        } catch (MalformedURLException e) {
            log.info("创建url对象异常,异常信息:{}", e.getMessage());
        }
    }

运行结果:
java中如何从一个url的字符串中提取出ip、port等信息_第4张图片

现在,可以很愉快的获取我需要的数据了,后续关于对账单的推送功能也顺利完成。

你可能感兴趣的:(随笔记录,java)