欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java中FTPClient上传中文目录、中文文件名乱码问题解决方法

程序员文章站 2024-03-04 14:32:17
问题描述:   使用org.apache.commons.net.ftp.ftpclient创建中文目录、上传中文文件名时,目录名及文件名中的中文显示为“...

问题描述:

  使用org.apache.commons.net.ftp.ftpclient创建中文目录、上传中文文件名时,目录名及文件名中的中文显示为“??”。

原因:

  ftp协议里面,规定文件名编码为iso-8859-1,所以目录名或文件名需要转码。

解决方案:

1.将中文的目录或文件名转为iso-8859-1编码的字符。参考代码:

复制代码 代码如下:

   string name="目录名或文件名";

   name=new string(name.getbytes("gbk"),"iso-8859-1");// 转换后的目录名或文件名。


2.设置linux环境变量
复制代码 代码如下:

export lc_all="zh_cn.gbk"
export lang="zh_cn.gbk"

实例:
复制代码 代码如下:

    public boolean uploadfile(file file, string path, string filename) throws ioexception {
        boolean result = false;
        ftpclient ftpclient = new ftpclient();
        try {
            ftpclient.connect(confservice.getconfvalue(portalconfcontants.ftp_client_host));
            ftpclient.login(confservice.getconfvalue(portalconfcontants.ftp_client_username), confservice
                    .getconfvalue(portalconfcontants.ftp_client_password));
            ftpclient.setfiletype(ftpclient.binary_file_type);

            // make directory
            if (path != null && !"".equals(path.trim())) {
                string[] pathes = path.split("/");
                for (string onepath : pathes) {
                    if (onepath == null || "".equals(onepath.trim())) {
                        continue;
                    }

                    onepath=new string(onepath.getbytes("gbk"),"iso-8859-1");                   
                    if (!ftpclient.changeworkingdirectory(onepath)) {
                        ftpclient.makedirectory(onepath);
                        ftpclient.changeworkingdirectory(onepath);
                    }
                }
            }

            result = ftpclient.storefile(new string(filename.getbytes("gbk"),"iso-8859-1"), new fileinputstream(file));
        } catch (exception e) {
            e.printstacktrace();
        } finally {
            ftpclient.logout();
        }
        return result;
    }