ple婶 2015-04-16 06:52 采纳率: 0%
浏览 8162

ftp方式下载,文件名包含��导致下载的文件为空

使用FTPClient类下载ftp文件,ftp服务器上的文件名fileName包含��字符,如 ftp_扫描[托管系统(��...]_2015-04-14_16-42-20.xml
调试代码,发现程序读取的文件名为 ftp_扫描[托管系统(??...]_2015-04-14_16-42-20.xml。
登录ftp方法:
FTPClient ftpClient = new FTPClient();
ftpClient.setControlEncoding("utf-8");
ftpClient.enterLocalActiveMode();
ftpClient.connect(ipAddress, ipPort);
ftpClient.login(userName, passWord);
下载文件的方法。
/**
* download
* 从ftp下载文件到本地
* @param fileName 服务器上的文件名
* @param path 服务器上的文件夹路径
* @param srcFile 本地存储路径
*/
public void download(String fileName, String path, String srcFile) {
FileOutputStream fos = null;
try {
String dstFileName = path + "/" + fileName;
fos = new FileOutputStream(srcFile);
ftpClient.setBufferSize(1024);
// 设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.retrieveFile(dstFileName, fos);
fos.close();
} catch (IOException e) {
logger.error(e.getMessage(), e);
} finally{
if(fos != null){
try {
fos.close();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
}
}
调试时读取ftp文件的名字如图:
图片说明
实际ftp路径下文件名如图:
图片说明
上传后文件为空如图:
图片说明
Encoding格式GBK、uft-8都试了,FileType试了BINARY_FILE_TYPE和ASCII_FILE_TYPE都不行。
请问这种��怎么处理?

  • 写回答

2条回答 默认 最新

  • lumengqi 2016-09-08 06:54
    关注

    下载文件内容为null是因为通过ftpClient上传的远程文件名编码格式不对,不被识别造成的。本地显示文件名时用GBK显示中文,
    发到ftp服务器端进行下载时上传的文件名编码格式要和ftpClient默认的编码格式一致,也就是IOS8859-1才可以被ftp识别。
    因此对你的dstFileName如此处理即可:new String(dstFileName.getBytes("GBK"),"ISO-8859-1");

    评论

报告相同问题?

悬赏问题

  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)