创建URI,提示【java.lang.IllegalArgumentException: Illegal character in path at index 38】异常

先上错误截图
URI错误截图
根据错误信息可知,用于创建URI的字符串中出现了非法字符,截图中的非法字符是“二”后面有个空格。第一想法就是使用trim()方法剔除空格,但是仔细一想,这种处理方式只能剔除空格非法字符,却无法剔除中括号 [{}] 这样的非法字符,写法太死板。于是有了下面这种思路:

public String checkPath(String path){
    try {
        //如果URI能够正常被创建,则返回这个路径
        return new URI(path).getPath();
    }catch (URISyntaxException e){
        //如果捕捉到创建URI的异常,则根据异常信息删掉这个非法字符
        StringBuilder builder = new StringBuilder(path);
        //递归判断剔除后的路径是否还有其它非法字符
        return checkPath(builder.deleteCharAt(e.getIndex()).toString());
    }
}

上述方法依然还有缺陷,就是当文件名中含有?#/这些特殊含义的字符,URI的getPath()方法是无法返回正确路径的,因此还需要在调用上述方法之前,需提前一步处理文件名。

public String getPath(String dirPath, String fileName){
    //剔除特殊含义的字符"?#/"
    fileName = fileName.replaceAll("[?|#/]", "");
    //返回路径
    return dirPath + fileName;
}

经测试,运行完美。

注:URI不能使用URI.create()创建,从源码可知该方法是捕捉异常、但又不向上抛出,是无法被自己写的try cath捕捉的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值