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;
}
栏 目:JAVA代码
下一篇:Java字符串定义及常用方法
本文标题:Java中FTPClient上传中文目录、中文文件名乱码问题解决方法
本文地址:http://www.codeinn.net/misctech/43380.html
阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机