原始发表时间:2009-08-20
FTPClient上传文件时,必须先关闭在服务器上打开的输出流对象,而后再等待命令结束后登出,否则会丢失文件的最后部分。
另外,想避免乱码,得用FTPClient 的 setControlEncoding
方法来设置编码,不过这仅仅是针对文件内容而言,传输的文件名称如果有中文的话,还是得进行转码。
下面黑体字
标识了这些需要注意的关键点相关的代码。
参考文章
http://blog.csdn.net/wangjian5748/archive/2008/11/28/3404619.aspx
得到的最终可用的正确代码如下:
FTPClient ftpclient = new FTPClient();
try {
listener.setProgress(TOTAL, 1, "连接 FTP...");
ftpclient.connect(...);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
listener.setProgress(TOTAL, 2, "登录 FTP...");
ftpclient.login(...);
} catch (IOException e) {
e.printStackTrace();
}
try {
ftpclient.setFileType(org.apache.commons.net.ftp.FTP.BINARY_FILE_TYPE);
ftpclient.setControlEncoding("GBK");
listener.setProgress(TOTAL, 3, "检测 FTP 目录...");
String
submitdatadir = ...;
ftpclient.changeWorkingDirectory(submitdatadir);
listener.setProgress(TOTAL, 4, "传输文件...");
OutputStream output =
ftpclient.storeFileStream(new
String(submitDataFileName.getBytes("GBK"), "iso8859-1")
);
if (output == null) {
log.debug("ReplyCode:" +
ftpclient.getReplyCode());
}
String
submitDataFileLocalPath = submitDataFileLocalDir + File.separatorChar +
submitDataFileLocalName;
InputStream input = new
FileInputStream(submitDataFileLocalPath);
int totalsize =
input.available();
log.debug("totalsize : " + totalsize);
byte[] buffer = new byte[1024];
int count = 0;
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
count += n;
log.debug("count: " + count);
listener.setProgress(TOTAL, 5, "传输文件,已传输 " + (count * 100 / totalsize) + "%
...");
}
output.close();
input.close();
if
(ftpclient.completePendingCommand()) {
log.debug("logout: " +
ftpclient.logout());
ftpclient.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
分享到:
相关推荐
org.apache.commons.net.ftp.FTPClient包,不错,在实际项目和产品中使用过。
Apache Commons Net » 3.3 org.apache.commons.net.ftp.FTPClient
Java代码连接FTP并且实现文件的上传和下载需要的jar文件。
commons-ftp中ftpClient类的API
FTP应用的jar包,主要用于java开发FTP上传下载
commons-ftp中ftpClient类的API.pdf
NULL 博文链接:https://vakinge.iteye.com/blog/487486
Java_FTPClient实现文件上传下载,所用到的jar包有: commons-net-1.4.1.jar jakarta-oro.jar
org.apache.commons.net.ftp.FTPClient FTP工具类,实现上传、下载、压缩到输出流下载等功能
FTPClient封装了所有必要的功能来存储和检索从FTP服务器上的文件。 这个类负责所有与FTP服务器交互的底层细节,并提供了便捷的更高层次的接口。 正如来自所有类SocketClient ,您必须首先连接到与服务器connect做...
sun.net.ftp.FtpClient,it.sauronsoftware.ftp4j.FTPClient,org.apache.commons.net.ftp.FTPClient三种不同的方式操作FTP
apache FTPClient 源码
JAVA操作ftp服务器,FTPClient所需要的jar包,版本号3.6,截止到2018-11-27是最新版本。里面有一个本人自己写的样例,没有工厂类等其他方法,直接一个主函数下来,简单粗暴易懂。如果需要官方提供的源码以及样例,请...
使用commons-net-1.4.1.jar,FTPClient连接成功了,但是ftpClient.listFiles(path).length=0 怎么办? 下载本工具,彻底解决问题。 不要增加类,也不要修改任何代码。 不要犹豫了,干掉commons-net-1.4.1.jar包,用这...
获取ftp服务器文件的大小,从而可以设置下载的进度条
ftpclient开发所需要的jar包,commons-net-1.4.1.zip,jakarta-oro-2.0.8.zip
本项目使用org.apache.commons.net.ftp.FTPClient实现文件上传到ftp服务器,解决不能上传中文文件的问题。
官方下载的commons-net-3.6包,里面包含了net3.6的jar包,以及jar包的源码,还有官方提供的调用样例。本人写了一个简单粗暴的上传样例,如果需要请移步https://download.csdn.net/download/yizhijiaozi/10809864