解决FTP的URL访问不能有中文名称的问题,报java.lang.IllegalArgumentException
2013-11-19 15:36
555 查看
最近一个项目要用到FTP做上传下载,我访问ftp的url中有中文名称,结果每次都报如下错:
本来可以用apache的FtpClient解决这个问题,但是我不太想用那种方式,我想省点步骤。所以坚持用
URL url = new URL("ftp://xxxx:1234@192.168.1.101:21/测试/测试.jpg");这种方式,网上搜了一大堆资料,基本都是说编码问题的。用了java.net.xxx自带转码的工具也没用,尝试了各种iso8859-1、GBK、UTF-8编码,依然无效。
最后发现windows的ftp服务器,是用gbk来处理的,linux的是utf-8,原来只需要在访问ftp前设置一下系统编码就OK了,下面放代码:
到此就算OK了,用了这个就不要再去给你的路径转码了,不然会导致读取失败!
2015-04-08 PS:时隔三年回来看这篇博客,感觉自己简直是个逗比,直接把FTP的用户和密码暴漏给了前台,如果我现在写的话,会经过服务器中转后才展示出来。当年刚入行,年轻啊。。。。
1 Exception in thread "main" java.lang.IllegalArgumentException 2 at sun.net.www.ParseUtil.decode(Unknown Source) 3 at sun.net.www.protocol.ftp.FtpURLConnection.decodePath(Unknown Source) 4 at sun.net.www.protocol.ftp.FtpURLConnection.getInputStream(Unknown Source) 5 at URLConnectionDownloader.download(URLConnectionDownloader.java:33) 6 at URLConnectionDownloader.main(URLConnectionDownloader.java:15)
本来可以用apache的FtpClient解决这个问题,但是我不太想用那种方式,我想省点步骤。所以坚持用
URL url = new URL("ftp://xxxx:1234@192.168.1.101:21/测试/测试.jpg");这种方式,网上搜了一大堆资料,基本都是说编码问题的。用了java.net.xxx自带转码的工具也没用,尝试了各种iso8859-1、GBK、UTF-8编码,依然无效。
最后发现windows的ftp服务器,是用gbk来处理的,linux的是utf-8,原来只需要在访问ftp前设置一下系统编码就OK了,下面放代码:
System.setProperty("file.encoding", "GBK"); URL url = new URL("ftp://xxxx:1234@192.168.1.101:21/测试/测试.jpg"); is =url.openConnection().getInputStream(); output = response.getOutputStream(); byte[] buffer = new byte[4096]; int count = 0; while ((count = is.read(buffer)) > 0) { output.write(buffer, 0, count); } output.flush(); response.flushBuffer(); is.close();
到此就算OK了,用了这个就不要再去给你的路径转码了,不然会导致读取失败!
2015-04-08 PS:时隔三年回来看这篇博客,感觉自己简直是个逗比,直接把FTP的用户和密码暴漏给了前台,如果我现在写的话,会经过服务器中转后才展示出来。当年刚入行,年轻啊。。。。
相关文章推荐
- 解决java poi导出excel2003不能超过65536行的问题(java.lang.IllegalArgumentException: Invalid row number (65536) o)
- 【Android】aar打包出现java.lang.IllegalArgumentException: MALFORMED 问题解决
- 解决:“java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut myMethod”问题!
- javadoc生成文档时java.lang.IllegalArgumentException问题解决
- Tomcat的异常 java.lang.IllegalArgumentException: Document base 发现问题解决问题
- 关于java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required 类似问题的解决总结
- 如何解决java.lang.IllegalArgumentException: Illegal character in query at index 的问题?
- Bitmap.createBitmap java.lang.IllegalArgumentException: width and height must be > 0 问题解决
- java.lang.IllegalArgumentException: Request header is too large问题解决
- Android 访问Webservice接口,参数对象不能串行化问题解决(java.lang.RuntimeException: Cannot serialize)
- java.lang.IllegalArgumentException: MALFORMED 问题解决
- spring boot jpa-java.lang.IllegalArgumentException: Not a managed type异常问题解决方法
- 使用android OpenGL时出现的java.lang.IllegalArgumentException: Must use a native order direct Buffer错误问题解决
- OKHttp java.lang.IllegalArgumentException: Unexpected url错误解决方法
- Bitmap.createBitmap java.lang.IllegalArgumentException: width and height must be > 0 问题解决
- bug_ _ java.lang.IllegalArgumentException: pointerIndex out of range 问题的两种解决办法
- 关于java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required 类似问题的解决总结
- java.lang.IllegalArgumentException: pointerIndex out of range 问题的两种解决办法
- java.lang.IllegalArgumentException:pointerIndex out of range问题的两种解决办法
- java.lang.IllegalArgumentException: pointerIndex out of range 问题的两种解决办法