URLEncoder.encode在对字符串进行转码时,会将空格转为”+“号,URLDecoder.decode方法再解码时会将加号"+"和"%20"都解码为空格。
表面上看起来没有什么问题,但是遇到上传文件时候,对于带有空格的文件,将文件名称URLEncoder.encode之后,拼接成完整的文件地址进行访问时,会提示文件不存在。
最好的处理方式是URLEncoder.encode在编码之后,调用replaceAll("\\+", "%20"),将所有的加号替换成%20。
String filename = "你好 nihao.pdf";
String encodefilename = java.net.URLEncoder.encode(filename).replaceAll("\\+", "%20");
这样转码之后就不会有问题了。
另附上判断网络文件是否存在的两个方法:
1.使用getInputStream()
boolean isExist = false;
try{
URL url = new URL(urlStr);// 注:urlStr中需将空格替换为%20,否则报505
URLConnection conn = url.openConnection();
conn.getInputStream();
isExist = true;
}catch(Exception e){
// 获取失败
isExist = false;
}
2.使用getResponseCode()
boolean isExist = false;
try{
URL url = new URL(urlStr);// 注:urlStr中需将空格替换为%20,否则报505
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
int state = conn.getResponseCode();
if(state == 200){
isExist = true;
}else{
isExist = false
}
}catch(Exception e){
isExist = false;
}