转:

 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zy910525/article/details/75530068

有台服务器,编码为GBK,发现服务器上的中文文件下载后文件大小为0,打开为空白。

经调查,是文件名编码格式不对导致,对于中文情况,使用FTPClient时编码格式需使用ISO-8859-1

具体代码:

package com.neusoft.ftptest;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply; public class FtpMain { public static void main(String[] args) {
FTPClient client = new FTPClient();
try {
client.connect("10.10.xxx.xxx", 21);
client.login("administrator", "xxx");
System.out.println(client.getControlEncoding());
int reply = client.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
client.disconnect();
System.out.println("Login error");
return;
}
client.setControlEncoding("GBK");
// client.segt System.out.println(client.getCharsetName());
// client.enterRemotePassiveMode();
client.enterLocalPassiveMode();
client.changeWorkingDirectory("11_COMMUNICATION/201204"); System.out.println("---------------------------------------"); String[] names; names = client.listNames();
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
System.out.println(names.toString()); System.out.println("---------------------------------------"); FTPFile f = client.listFiles()[0];
System.out.println(f.getLink());
client.changeWorkingDirectory("/");
String path = "/10_NOTICE_FILE/201706";
// String path = "/10_NOTICE_FILE/201203/"; client.setBufferSize(1024);
client.setFileType(FTP.BINARY_FILE_TYPE);
client.enterLocalPassiveMode();
client.changeWorkingDirectory(path); FTPFile[] fs = client.listFiles();
FileOutputStream out = null;
InputStream in = null;
for (int i = 0; i < fs.length; i++) {
FTPFile ff = fs[i];
String outFileName = ff.getName();
System.out.println(outFileName); //本地目录文件不需要编码
File localFile = new File("D:\\ftp\\" + ff.getName());
OutputStream fos = new FileOutputStream(localFile);
// ftp需使用ISO-8859-1编码格式
String localFileName = new String(ff.getName().getBytes("GBK"), "ISO-8859-1");
client.retrieveFile(localFileName, fos);
fos.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
client.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } }

解决FTP服务器上中文名文件下载后为空的问题的更多相关文章

  1. java实现读取ftp服务器上的csv文件

    定义ftp操作接口 import java.io.InputStream; import java.util.List; import org.apache.commons.net.ftp.FTPCl ...

  2. “打开ftp服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹"

    阿里云虚拟主机上传网站程序 问题场景:网页制作完成后,程序需上传至虚拟主机 注意事项: 1.Windows系统的主机请将全部网页文件直接上传到FTP根目录,即 / . 2. 如果网页文件较多,上传较慢 ...

  3. 使用批处理文件在FTP服务器 上传下载文件

    1.从ftp服务器根目录文件夹下的文件到指定的文件夹下 格式:ftp -s:[配置文件] [ftp地址] 如:ftp -s:c:\vc\ftpconfig.txt   192.168.1.1 建立一个 ...

  4. 浏览器通过http协议通过nginx访问ftp服务器上的文件

    1.修改nginx配置文件 2.修改nginx默认目录为ftp默认目录 3.修改成自定义路径后,并修改此目录第一行,修改为root或是nginx用户 4.重新加载 cd /usr/local/ngin ...

  5. shell脚本实现自动压缩一天前的日志文件 ,并传到ftp服务器上

    shell脚本实现自动压缩一天前的日志文件 ,并传到ftp服务器上 naonao_127关注2人评论19401人阅读2012-06-08 11:26:16         生产环境下脚本自动备份脚本是 ...

  6. 使用SAXReader读取ftp服务器上的xml文件(原创)

    根据项目需求,需要监测ftp服务器上的文件变化情况,并将新添加的文件读入项目系统(不需要下载). spring配置定时任务就不多说了,需要注意的一点就是,现在的项目很多都是通过maven构建的,分好多 ...

  7. 打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹

    打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问 在win98,winme,win2000,win2003下都能正常上传文件夹,但在winxp+sp2下同样的文件夹就可能出现问题 1. 打开 ...

  8. FTP服务器上删除文件夹失败

    很多人都知道:要删除FTP服务器上的文件夹时,必须确保文件夹下面没有其他文件,否则会删除失败! 可是,有些服务器考虑到安全等因素,通常会隐藏以点开始的文件名,例如“.test.txt”.于是,有的坏人 ...

  9. Spring学习---Spring中利用组件实现从FTP服务器上传/下载文件

    FtpUtil.java import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcepti ...

随机推荐

  1. systemd自启动tomcat

    tomcat自启动service [Unit] Description=Tomcat After=network.target [Service] Type=forking PIDFile=/usr/ ...

  2. DA_06_iptables 与 firewalld 防火墙

    8.1 防火墙管理工具 防火墙作为公网与内网之间的保护屏障,在保障数据的安全性方面起着至关重要的作用.主要功能都是依据策略对穿越防火墙自身的流量进行过滤.防火墙策略可以基于 流量的源目地址.端口号.协 ...

  3. sum(n,m)的解法

    给出两个整数n和m,你应该计算从n到m的所有整数的和.换句话说,你应该计算: SUM(n,m)= n +(n + 1)+(n + 2)+ ... +(m-1)+ m 方法1. 方法2.

  4. kotlin面向对象入门

    之前在学kotlin基础语法时咱们是采用三方jar包在eclipse工程下进行的,很显然这工具在实际商用中基本上很少用到了,最终是要编写android程序,所以说从这里起得更换一个更加智能更加贴近实际 ...

  5. (八)zabbix获取到的数值自定义单位

    1) 查找php文件 # find / -name "func.inc.php" /usr/share/zabbix/include/func.inc.php 2)修改文件 #vi ...

  6. 第十一章 前端开发-bootstrap

    11.5.0 bootstrap 11.5.1 bootstrap的介绍和响应式 http://book.luffycity.com/python-book/95-bootstrap/951-boot ...

  7. JAVA_GET请求URL

    import java.io.IOException; import net.sf.json.JSONObject; import org.apache.commons.httpclient.Defa ...

  8. Acwing-285-没有上司的舞会(树型DP)

    链接: https://www.acwing.com/problem/content/287/ 题意: Ural大学有N名职员,编号为1~N. 他们的关系就像一棵以校长为根的树,父节点就是子节点的直接 ...

  9. mysql 查看删除触发器等操作

    mysql 查看删除触发器等操作 平时很少操作触发器,源于昨晚的一次故障,使用pt-online-change-schema修改大表过程中出现异常,再次执行时,提示已经存在触发器,导致失败. 这里推荐 ...

  10. k8s集群节点更换ip 或者 k8s集群添加新节点

    1.需求情景:机房网络调整,突然要回收我k8s集群上一台node节点机器的ip,并调予新的ip到这台机器上,所以有了k8s集群节点更换ip一说:同时,k8s集群节点更换ip也相当于k8s集群添加新节点 ...