Java中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;
}
推荐阅读