Java FTP 下载文件和文件夹

Java FTP   2013-12-13 22:58:45 发布

您的评价:
     
0.0
收藏     0收藏

用apache下的common-net.jar包开发Java FTP下载功能

导入apache-net-2.0.jar到工程中以及其他jar

 import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.SocketException;import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;/*** 采用的是apache commons-net架包中的ftp工具类实现的* * @author chiyong* */
public class FtpCollectionUtil {
private String username;
private String password;
private String ftpHostName;
private int port = 21;
private FTPClient ftpClient = new FTPClient();
private FileOutputStream fos = null;
private Logger logger = Logger.getLogger(FtpCollectionUtil.class);public FtpCollectionUtil(String username, String password,
String ftpHostName, int port) {
super();
this.username = username;
this.password = password;
this.ftpHostName = ftpHostName;
this.port = port;
}/**
* 建立连接b
*/
private void connect() {
try {
logger.debug("开始连接");
// 连接
ftpClient.connect(ftpHostName, port);
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
}
// 登录
ftpClient.login(username, password);
ftpClient.setBufferSize(256);ftpClient.setFileType(FTP.BINARY_FILE_TYPE);ftpClient.setControlEncoding("utf8");
logger.debug("登录成功!");
logger.debug("开始登录!");
} catch (SocketException e) {
logger.error("", e);
} catch (IOException e) {
logger.error("", e);
}}
/**
* 关闭输入输出流
*
* @param fos
*/
private void close(FileOutputStream fos) {
try {
if (fos != null) {
fos.close();
}ftpClient.logout();
logger.info("退出登录");
ftpClient.disconnect();
logger.info("关闭连接");
} catch (IOException e) {
logger.error("", e);
}
}/**
* 下载文件
*
* @param ftpFileName
* @param localDir
*/
public void down(String ftpFileName, String localDir) {
connect();
downFileOrDir(ftpFileName, localDir);
close(fos);
}private void downFileOrDir(String ftpFileName, String localDir) {
try {
File file = new File(ftpFileName);File temp = new File(localDir);if (!temp.exists()) {
temp.mkdirs();
}
// 判断是否是目录
if (isDir(ftpFileName)) {
String[] names = ftpClient.listNames();
for (int i = 0; i < names.length; i++) {
System.out.println(names[i] + "^^^^^^^^^^^^^^");
if (isDir(names[i])) {
downFileOrDir(ftpFileName + '/' + names[i], localDir
+ File.separator + names[i]);
ftpClient.changeToParentDirectory();
} else {
File localfile = new File(localDir + File.separator
+ names[i]);
if (!localfile.exists()) {
fos = new FileOutputStream(localfile);
ftpClient.retrieveFile(names[i], fos);} else {
logger.debug("开始删除文件");
file.delete();
logger.debug("文件已经删除");
fos = new FileOutputStream(localfile);
ftpClient.retrieveFile(ftpFileName, fos);}}
}
} else {File localfile = new File(localDir + File.separator
+ file.getName());
if (!localfile.exists()) {
fos = new FileOutputStream(localfile);
ftpClient.retrieveFile(ftpFileName, fos);} else {
logger.debug("开始删除文件");
file.delete();
logger.debug("文件已经删除");
fos = new FileOutputStream(localfile);
ftpClient.retrieveFile(ftpFileName, fos);}
ftpClient.changeToParentDirectory();}logger.info("下载成功!");
} catch (SocketException e) {
logger.error("连接失败!", e);
} catch (IOException e) {
logger.error("下载失败!", e);
}}// 判断是否是目录
public boolean isDir(String fileName) {
try {
// 切换目录,若当前是目录则返回true,否则返回true。
boolean falg = ftpClient.changeWorkingDirectory(fileName);
return falg;
} catch (Exception e) {
e.printStackTrace();
logger.error("", e);
}return false;
}public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}public String getFtpHostName() {
return ftpHostName;
}
public void setFtpHostName(String ftpHostName) {
this.ftpHostName = ftpHostName;
}public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public class TestFileUtil {public static void main(String[] args) {
/**
* apache common-net实现的
*/
FtpCollectionUtil ftpUtil = new FtpCollectionUtil("webfocus1",
"webfocus1", "192.168.0.2", 21);// /home/webfocus1/apache-tomcat-6.0.37/webapps/NEZA_ROOT/要下载的文件夹。
ftpUtil.down(
"/home/webfocus1/apache-tomcat-6.0.37/webapps/NEZA_ROOT/",
"D://a");}
}} 

Java FTP 下载文件和文件夹相关推荐

  1. java批量下载多个文件并压缩

    java批量下载多个文件并压缩 本段代码的功能主要是实现通过文件主键,循环遍历下载各种格式的文件,下载后由java数据流处理压缩成一个zip格式的压缩包返回给前端页面. 后端实现控制层(Control ...

  2. Java FTP下载文件以及编码问题小结

    问题 之前在开发过程中,遇到了一点问题,我要访问一个FTP服务器去下载文件详细情况如下: 1. 需要传入一个可能为中文的文件名: 2. 通过文件名去FTP上寻找该文件: 3. FTP服务器的命名编码为 ...

  3. 压缩base 64字符串_ftp下载多个文件,ftp下载多个文件打包成一个压缩包

    在一些日常的网络批量维护工作中,经常需要使用ftp计划任务,定时上传或下载多个文件.对不太了解ftp命令和windows计划任务的新手来说,确实是一个很棘手的问题.今天我们来看看如何简单的实现这功能. ...

  4. 通过CMD命令连接ftp下载和上传文件

    通过CMD命令连接ftp下载文件 win+r输入cmd打开DOS命令 2.连接ftp 格式:ftp ip然后回车根据提示输入用户名和密码 3.登陆成功后.输入"cd"命令.会显示& ...

  5. 使用java程序下载远程zip文件并解压文件( 带注释解释代码)

    带注释解释代码 package com.zcl.Test;import java.io.*; import java.net.HttpURLConnection; import java.net.So ...

  6. java ftp下载文件源码_java实现ftp文件下载的源代码

    这几天做的一个项目中用到了ftp文件传输,用java实现了ftp文件的下载. 一.win7下搭建ftp服务器 详见:http://jingyan.baidu.com/article/4b52d7026 ...

  7. java ftp 下载慢_Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题

    废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadToFTP(String url,int port,String usern ...

  8. java ftp 下载 0k_Ftp下载文件大小为0 KB

    这里是我的问题的解决方案.我通过一些小的修改修改了我的代码.给定的代码将获得给定ftp路径中的所有文件,并以文件夹结构将其存储在本地目录中. 输出结构将是这样的例子: E:\ FtpFiles \ 2 ...

  9. java 使用ftp下载远程服务器文件

    第一种方法连接中带有账号密码直接远程下载: public Result<?> download(){//进行下载文件---------------------------------开始/ ...

  10. java ftp下载文件 慢_java实现ftp文件上传下载,解决慢,中文乱码,多个文件下载等问题...

    标签: //文件上传 public static boolean uploadToFTP(String url,int port,String username,String password,Str ...

最新文章

  1. python mysqldb 清除缓存_Python MySqlDB 增删改数据库
  2. R语言使用colnames函数改变dataframe列名称实战
  3. java 通常在函数内部创建对象还是在外部创建对象_java中为什么在主函数中创建外部类对象可以,创建内部类对象就失败了呢?2类不都是非静态的吗?...
  4. Duilib vlc c++ 字符编码
  5. 商城html源码_延边小程序商城
  6. 如何用计算机声卡,声卡是什么,详细教您怎么查看自己电脑的声卡
  7. 蒲公英怎么加入别人的网络_挖蒲公英吃的,抓紧看看吧!
  8. 倒计时 7 天 | 完整议程大揭秘!来 20 个 AI 论坛,与百名大咖携手玩转人工智能...
  9. 央行发布声纹识别安全应用技术标准,适用手机银行、第三方支付
  10. linux切换英文界面,linux英文界面下使用中文输入法
  11. UE4 蓝图实现AI随机移动
  12. ApacheCN 活动汇总 2019.6.28
  13. 一起学爬虫(Python) — 01
  14. ffmpeg批量转换ts为mp4
  15. 顶尖、顶级、权威期刊目录
  16. C语言六边形蜂巢数组,生活中的数学之奇妙的蜂窝构造
  17. linux中进程unit是什么意思,linux-日常运维- unit介绍
  18. “辣条大王”卫龙奔向港交所 能否撑起600亿估值?
  19. openwrt新3路由lede动态dns如何使用,阿里云ddns+ipv6
  20. Data Binding学习(一)

热门文章

  1. 软件开发人员的简历项目经验怎么写?
  2. 回顾·神马搜索技术演进之路
  3. 飞翔(风吹)的flash文字
  4. H5 页面在 APP 里如何支持缩放,并隐藏手机自带的放大缩小图标。
  5. 自由软件江湖里的码头和规矩
  6. 方德系统服务器,国产方德桌面操作系统介绍
  7. 软件安全测试是为了什么,一航软件测评有这些见解
  8. 计算机辅助教育题库和答案,计算机考试题库及参考答案.docx
  9. 《有限单元法》--王勖成,习题2.12 MATLAB 程序
  10. 关于使用Curvy插件实现物体沿指定路径移动的方法