zoukankan      html  css  js  c++  java
  • 解决FTP的URL访问不能有中文名称的问题,报java.lang.IllegalArgumentException

    最近一个项目要用到FTP做上传下载,我访问ftp的url中有中文名称,结果每次都报如下错:

    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的用户和密码暴漏给了前台,如果我现在写的话,会经过服务器中转后才展示出来。当年刚入行,年轻啊。。。。

  • 相关阅读:
    http修改443端口,http 强制跳转https
    线程event事件函数实现红绿灯
    信号量设置
    多线程简单实例
    paramiko 实现ssh登录和sftp登录
    在同一台电脑安装python 2 和3,并且怎样安装各自的pip和模块
    ThreadingTCPServer 如何设置端口重用
    Python 变量比较
    python 多线程 并发socket实例
    python 中变量引用问题
  • 原文地址:https://www.cnblogs.com/rising-fay/p/3431580.html
Copyright © 2011-2022 走看看