当前位置 博文首页 > ftpclient类问题,ftpclient中文路径问题

    ftpclient类问题,ftpclient中文路径问题

    作者:xiaoyingying 时间:2021-07-31 11:33

        使用commons-net-2.0.jar包进行FTP操作
        使用FTPClient下载文件时,如果路径中有中文无法下载,将路径
        转码为iso-8859-1后,可以下载
        还有一种方式,再newFTPClient()后,可以设置编码,
        ftpClient=newFTPClient();
        ftpClient.setControlEncoding(GBK);//不能在connect,login之后设置
        ftpClient.connect(ip,port);
        ftpClient.login(userName,passWord);
        但一定要在创建时设置,不能在连接、登录后再设置,否则不生效
        查看源码得知
        FTPClient继承FTP,FTP继承SocketClient,
        所以ftpClient调用方法connect()时,会调用_connectAction_()方法,如果还没有没置编码,
        getControlEncoding()会默认使用ios-8859-1,
        所以必需在connect前完成编码设置
        FTP在_connectAction_()方法时使用设置的编码
        protectedvoid_connectAction_()
        throwsIOException
        {
        super._connectAction_();
        this._controlInput_=newBufferedReader(newInputStreamReader(this._socket_.getInputStream(),getControlEncoding()));
        this._controlOutput_=newBufferedWriter(newOutputStreamWriter(this._socket_.getOutputStream(),getControlEncoding()));
        __getReply();
        if(FTPReply.isPositivePreliminary(this._replyCode))
        __getReply();
        }
        FTP继承SocketClient,connect()时调用_connectAction_()
        publicvoidconnect(InetAddresshost,intport)
        throwsSocketException,IOException
        {
        this._socket_=this._socketFactory_.createSocket();
        this._socket_.connect(newInetSocketAddress(host,port),this.connectTimeout);
        _connectAction_();
        原文:https://www.cnblogs.com/xuruhong/archive/2013/08/21/3271751.html