0 0

java如何实现从远程FTP服务器定时更新相关文件10

背景是这样的:
远程ftp服务器会更新某目录下的一些文件,本地服务器需要定时下载这些更新后的文件。

我的想法是:由最后修改时间判断该文件是不是最新的(用Spring+Quartz定时去ftp服务器看是否有文件可以更新),然后下载更新的文件,这样可避免重复下载。

各位有没有类似的程序例子?

谢谢了!
ftpClient有一种方法是 ftpClient.getModificationTime(String pathname)可以得到文件的最后修改时间
Quartz+Spring实现定时任务配置好了,业务逻辑那怎么写

问题补充:
huoyj 写道
经你这么的分析,这里面已经没有什么无法解决的技术问题了,随手就能写出代码,为什么还要别人给例子呢。

用ftpClient.getModificationTime(String pathname)这个方法时候总是报数组越界异常,另外怎么拿ftp的文件修改时间跟已下载的文件时间比较,该怎么比较有点不明白,请您指教,谢谢

问题补充:
huoyj 写道
apache的common-net里面有FTPFile类,代表FTP服务器上的一个文件,FTPFile类里面有方法getTimestamp就是获取文件的修改时间的,而你本地的文件File也有类似的方法,你获取到后可以直接比较了。
不过你应该注意到一个问题,那就是时区必须一致。


// 取远程文件信息
Map<String, FileObject> remotefiles = getRemotefiles();
// 取本地文件信息
Map<String, FileObject> localfiles = getLocalfiles();
// 按远程文件信息对比本地文件信息
Iterator it = remotefiles.keySet().iterator();
while (it.hasNext()) {
String key = (String) it.next();
System.out.println(remotefiles.get(key));
                        在这里该怎么写呢?
localfiles.get(key).lasttime可以得到当地目录各文件时间,
remotefiles.get(key).lasttime可以得到服务器目录各文件时间

问题补充:
huoyj 写道
FileObject localFile = localfiles.get(key);
FileObject remoteFile = remotefiles.get(key);
if(localFile==null&&remoteFile!=null)  //如果本地没有文件,就下载
{
    //download
   return;
}else if(remoteFile==null)    //远程文件被删就不用下载了
{
    return;
}
//根据本地和远程文件的最后修改时间判断下不下载。
long localFileTime = localFile.lasttime;
long remoteFileTime = remoteFile.lasttime;
if(localFileTime<remoteFile)  //本地文件较旧
{
    //download
    return ;
}
return;

大概就是这样的吧,你再看着改改。



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);
return;
}
System.out.println(localfiles.get(key).lasttime);
// 根据本地和远程文件的最后修改时间判断下不下载。
Date localFileTime = CommonStringDateUtil
.parse(localFile.lasttime);
Date remoteFileTime = CommonStringDateUtil
.parse(remoteFile.lasttime);
if (localFileTime.before(remoteFileTime)) // 本地文件较旧
{
doDownload(remotefiles);
return;
}else{
System.out.println("不需要更新");
}
return;
}


解决了,谢谢给予帮助
2011年11月30日 16:41

3个答案 按时间排序 按投票排序

0 0

采纳的答案

FileObject localFile = localfiles.get(key);
FileObject remoteFile = remotefiles.get(key);
if(localFile==null&&remoteFile!=null)  //如果本地没有文件,就下载
{
    //download
   return;
}else if(remoteFile==null)    //远程文件被删就不用下载了
{
    return;
}
//根据本地和远程文件的最后修改时间判断下不下载。
long localFileTime = localFile.lasttime;
long remoteFileTime = remoteFile.lasttime;
if(localFileTime<remoteFile)  //本地文件较旧
{
    //download
    return ;
}
return;

大概就是这样的吧,你再看着改改。

2011年12月01日 13:27
0 0

apache的common-net里面有FTPFile类,代表FTP服务器上的一个文件,FTPFile类里面有方法getTimestamp就是获取文件的修改时间的,而你本地的文件File也有类似的方法,你获取到后可以直接比较了。
不过你应该注意到一个问题,那就是时区必须一致。

2011年12月01日 10:01
0 0

经你这么的分析,这里面已经没有什么无法解决的技术问题了,随手就能写出代码,为什么还要别人给例子呢。

2011年11月30日 17:17

相关推荐

Global site tag (gtag.js) - Google Analytics