设为首页 收藏本站
查看: 1212|回复: 0

[经验分享] 从远程ftp上按修改时间或文件名称更新相关文件(原创)

[复制链接]

尚未签到

发表于 2016-6-10 13:15:20 | 显示全部楼层 |阅读模式
package com.bj.ftp;
/**
*需要ftp4j.jar
*author http://faithlee.iyunv.com
*/
import it.sauronsoftware.ftp4j.FTPAbortedException;
import it.sauronsoftware.ftp4j.FTPClient;
import it.sauronsoftware.ftp4j.FTPDataTransferException;
import it.sauronsoftware.ftp4j.FTPException;
import it.sauronsoftware.ftp4j.FTPFile;
import it.sauronsoftware.ftp4j.FTPIllegalReplyException;
import it.sauronsoftware.ftp4j.FTPListParseException;
import java.io.File;
import java.io.IOException;
http://faithlee.iyunv.com
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.bj.util.CommonStringDateUtil;
import com.bj.util.PropertiesUtil;
public class FtpTool {
private FTPClient client = new FTPClient();
/**
* 连接且登录到特定的FTP服务器文件夹
*
* @return
* @throws FTPException
* @throws FTPIllegalReplyException
* @throws IOException
* @throws IllegalStateException
*/
public boolean connectToServer(PropertiesUtil pro,String filename) throws IllegalStateException, IOException,
FTPIllegalReplyException, FTPException {
String server = pro.getValue(filename, "ftp.ip");
String user = pro.getValue(filename, "ftp.user");
String password = pro.getValue(filename, "ftp.password");
String path = pro.getValue(filename, "ftp.path");
client.connect(server);
client.login(user, password);
System.out.println("登陆成功");
client.changeDirectory(path);
if (client.isCompressionSupported()) {
client.setCompressionEnabled(true);
}
return true;
}
/**http://faithlee.iyunv.com
* // 根据修改时间更新相同文件名的文件
* public boolean doUpdate() throws
* IllegalStateException, IOException, FTPIllegalReplyException,
* FTPException, FTPDataTransferException, FTPAbortedException,
* FTPListParseException { Boolean bl = null;
* Map<String,FileObject> remotefiles = getRemotefiles();
* Map<String,FileObject> localfiles = getLocalfiles();
* // 按远程文件信息对比本地文件信息
* Iterator it= remotefiles.keySet().iterator();
* while (it.hasNext())
* { String key =(String) it.next();
* FileObject localFile = localfiles.get(key);
* FileObject remoteFile = remotefiles.get(key);
* if (localFile == null &&remoteFile != null)
* { doDownload(remotefiles); bl = true;}
* //根据本地和远程文件的最后修改时间判断下不下载。
* Date localFileTime =CommonStringDateUtil.parse(localFile.lasttime);
* Date remoteFileTime =CommonStringDateUtil .parse(remoteFile.lasttime);
* if(localFileTime.before(remoteFileTime)) {
* delete();doDownload(remotefiles); bl = true; }
* else { bl = false; }
* } return bl; }
*/
/**
根据文件名变化更新文件
*/
public boolean doUpdate(String localdir) throws IllegalStateException, IOException,
FTPIllegalReplyException, FTPException, FTPDataTransferException,
FTPAbortedException, FTPListParseException {
Boolean bl = false;
// 取远程文件信息
Map<String, FileObject> remotefiles = getRemotefiles();
// 取本地文件信息
Map<String, FileObject> localfiles = getLocalfiles(localdir);
// 按远程文件信息对比本地文件信息
if (localfiles.size() == 0 && remotefiles.size() != 0) {
System.out.println("本地为空");
bl = true;
System.out.println("开始下载远程文件");
doDownload(remotefiles,localdir);
System.out.println("下载完成");
} else {
Iterator<String> it = remotefiles.keySet().iterator();
while (it.hasNext()) {
String key = (String) it.next();
if (!localfiles.containsKey(key)) {
System.out.println("需要更新");
System.gc();
delete(localdir);
System.out.println("删除完成");
System.out.println("开始下载新文件");
doDownload(remotefiles,localdir);
System.out.println("下载完成");
bl = true;
break;
} else {
bl = false;
}
}
}
return bl;
}
/**
* 取服务器文件
*
* @return
* @throws FTPListParseException
* @throws FTPAbortedException
* @throws FTPDataTransferException
* @throws FTPException
* @throws FTPIllegalReplyException
* @throws IOException
* @throws IllegalStateException
*/
private  Map<String, FileObject> getRemotefiles()
throws IllegalStateException, IOException,
FTPIllegalReplyException, FTPException, FTPDataTransferException,
FTPAbortedException, FTPListParseException {
FTPFile[] files = client.list();
Map<String, FileObject> rtn = new HashMap<String, FileObject>();
for (FTPFile file : files) {
if (".".equals(file.getName()) || "..".equals(file.getName())) {
continue;
}
FileObject o = new FileObject();
o.filename = file.getName();
o.lasttime = CommonStringDateUtil.format(file.getModifiedDate());
rtn.put(o.filename, o);
}
return rtn;
}
/**
* 取本地文件夹的所有文件信息
*
* @return
*/
private  Map<String, FileObject> getLocalfiles(String localdir) {
File f = new File(localdir);
if (!f.exists()) {
System.out.println("目录不存在,创建目录");
f.mkdirs();
}
Map<String, FileObject> rtn = new HashMap<String, FileObject>();
if (f.isDirectory()) {
for (File file : f.listFiles()) {
FileObject fo = new FileObject();
fo.filename = file.getName();
fo.lasttime = CommonStringDateUtil.format(new Date(file
.lastModified()));
rtn.put(fo.filename, fo);
}
}
return rtn;
}
/**
* 删除本地文件
*
*/
private void delete(String localdir) {
File f = new File(localdir);
File delFile[] = f.listFiles();
int i = f.listFiles().length;
for (int j = 0; j < i; j++) {
delFile[j].delete();
}
}
/**
* 下载ftp服务器文件
*/
private  void doDownload(Map<String, FileObject> remotefiles ,String localdir)
throws IllegalStateException, IOException,
FTPIllegalReplyException, FTPException, FTPDataTransferException,
FTPAbortedException {
for (String filename : remotefiles.keySet()) {
client.download(filename, new File(localdir + filename));
}
}
public void close() throws IllegalStateException, IOException,
FTPIllegalReplyException, FTPException {
client.disconnect(true);
}
}
class FileObject {
String filename;
String lasttime;
@Override
public String toString() {
return filename + "|" + lasttime;
}
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-228703-1-1.html 上篇帖子: 广告项目:(3)FTP文件上传、Freemarker、文件操作等等工具类 下篇帖子: ror项目里通过FTP定时获取文件存储到程序目录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表