解决FTP服务器上中文名文件下载后为空的问题
转:
有台服务器,编码为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服务器上中文名文件下载后为空的问题的更多相关文章
- java实现读取ftp服务器上的csv文件
定义ftp操作接口 import java.io.InputStream; import java.util.List; import org.apache.commons.net.ftp.FTPCl ...
- “打开ftp服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹"
阿里云虚拟主机上传网站程序 问题场景:网页制作完成后,程序需上传至虚拟主机 注意事项: 1.Windows系统的主机请将全部网页文件直接上传到FTP根目录,即 / . 2. 如果网页文件较多,上传较慢 ...
- 使用批处理文件在FTP服务器 上传下载文件
1.从ftp服务器根目录文件夹下的文件到指定的文件夹下 格式:ftp -s:[配置文件] [ftp地址] 如:ftp -s:c:\vc\ftpconfig.txt 192.168.1.1 建立一个 ...
- 浏览器通过http协议通过nginx访问ftp服务器上的文件
1.修改nginx配置文件 2.修改nginx默认目录为ftp默认目录 3.修改成自定义路径后,并修改此目录第一行,修改为root或是nginx用户 4.重新加载 cd /usr/local/ngin ...
- shell脚本实现自动压缩一天前的日志文件 ,并传到ftp服务器上
shell脚本实现自动压缩一天前的日志文件 ,并传到ftp服务器上 naonao_127关注2人评论19401人阅读2012-06-08 11:26:16 生产环境下脚本自动备份脚本是 ...
- 使用SAXReader读取ftp服务器上的xml文件(原创)
根据项目需求,需要监测ftp服务器上的文件变化情况,并将新添加的文件读入项目系统(不需要下载). spring配置定时任务就不多说了,需要注意的一点就是,现在的项目很多都是通过maven构建的,分好多 ...
- 打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹
打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问 在win98,winme,win2000,win2003下都能正常上传文件夹,但在winxp+sp2下同样的文件夹就可能出现问题 1. 打开 ...
- FTP服务器上删除文件夹失败
很多人都知道:要删除FTP服务器上的文件夹时,必须确保文件夹下面没有其他文件,否则会删除失败! 可是,有些服务器考虑到安全等因素,通常会隐藏以点开始的文件名,例如“.test.txt”.于是,有的坏人 ...
- Spring学习---Spring中利用组件实现从FTP服务器上传/下载文件
FtpUtil.java import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcepti ...
随机推荐
- 【转】(深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)
bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域. bss是英文Block Started by Symbol的简称. bss段属于静态内存分配. ...
- C/C++小课之数组名是什么
我们今天讨论数组名是什么东西,理解它有助于我们进一步理解和使用指针. 因为它涉及到了内存地址. 问题 数组名是什么?含义是什么? 思路 前提 一个值+1之后的变化可以反映出它的意义/含义. 前提的证明 ...
- Trie树(代码),后缀树(代码)
Trie树系列 Trie字典树 压缩的Trie 后缀树Suffix tree 后缀树--ukkonen算法 Trie是通过对字符串进行预先处理,达到加快搜索速度的算法.即把文本中的字符串转换为树结构, ...
- System.nanoTime与System.currentTimeMillis
System.nanoTime提供相对精确的计时,但是不能用他来计算当前日期.(系统计时器的当前值,以毫微秒为单位) System.currentTimeMillis返回的是从1970.1.1 UTC ...
- Pandas中DataFrame数据合并、连接(concat、merge、join)之concat
一.concat:沿着一条轴,将多个对象堆叠到一起 concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, key ...
- shareSDK集成遇到的问题汇总
问题一.平台添加应用时需要输入的签名(下图)的获取方式 第一步.通过android studio生成签名保存在本地 第二步.查看签名的信息 问题二.由于同事集成了QQ登录和微信登录,后来又需要加入微博 ...
- js差异化继承
var parentObj={ name:"123456", get_name:function(){ return this.name; }, says:function(){ ...
- attr(name|properties|key,value|fn)
attr(name|properties|key,value|fn) 概述 设置或返回被选元素的属性值.大理石平台厂家 参数 nameStringV1.0 属性名称 propertiesMapV1 ...
- .net大文件上传断点续传解决方案
HTML部分 <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="index.aspx. ...
- C/C++ - malloc/free和new/delete的区分
new/delete与malloc/free的区别主要表现在以下几个方面: 注意:最主要的区别,new/delete是运算符,而malloc/free是函数 (1).new能够自动计算需要分配的内存空 ...