如何仅从服务器下载新文件?

时间:2009-04-12 08:34:04

标签: java filesystems

我每天都想从雅虎财务部门下载许多CSV文件。我希望我的应用程序读取文件的创建日期(在我的计算机上,而不是服务器上)。如果创建日期早于今天,则应下载新文件(因为它将具有新数据)。如果没有,则不应下载新文件,并且相关计算器(基本上就是我的应用程序)应使用最后下载的文件作为特定股票代码。

我做了一些谷歌搜索并找到了Apache POI项目。

这是最好的方式,有更好的方法,你会推荐什么? JNI在这里有关系吗?

4 个答案:

答案 0 :(得分:5)

我可能会遗漏一些东西,但我不明白为什么你需要JNI或POI来下载文件。 如果您使用HTTP下载文件,则可以使用带有“If-Modified-Since”请求标头的HttpURLConnection。

答案 1 :(得分:4)

您是否考虑创建用于访问该特定文件夹的FTP帐户,然后使用SmartFTP或FileZilla等FTP客户端将本地文件夹与远程文件夹同步?应该很容易设置并且使用方便...而且,您可以简单地创建一个FTP命令脚本并从Java代码执行该脚本,如果绝对必要的话......

或者我会尝试指向另一个方向:md5()或其他消息摘要算法可以帮助您。你不必依赖时间戳。尝试计算您拥有的文件的md5()哈希以及您要下载的文件。然后你知道是否要下载。

答案 2 :(得分:2)

  

我有很多CSV文件   想从雅虎财经下载   每天。我想要我的申请   读取文件的创建日期(在我的   电脑,而不是服务器)。如果   创建日期早于今天   应下载新文件(如   它会有新的数据。)

为了检测对本地文件的更改,您需要文件的上次修改日期,该日期比这种检查的创建日期更通用(因为它还显示文件创建后的更改)。

您可以使用

在Java中获取它
public long lastModified()

文件对象的方法。

请注意,没有方法可以在File API中获取创建日期,可能是因为此信息在所有文件系统中都不可用。

如果您绝对需要有文件创建日期,那么(如果您自己创建文件或者可以询问那些文件)您可以按照约定在文件名中对创建日期进行编码,像这样:myfile_2009_04_11.csv。

然后你必须解析文件名并确定创建日期。

  

我做了一些谷歌搜索并且有   找到了Apache POI项目。这是   最好的方式,是否有更好的   方式,你会推荐什么。

Apache POI项目是一个用于读写MS Office文件的库(本例中为Excel文件)。 CSV是一种简单的文本格式,因此您无需POI即可阅读。

此外,您需要的信息(创建日期或上次修改日期)可作为文件本身的元数据使用,而不是文件数据中的元数据,因此您无需使用POI即可获取信息。

  

JNI在这里是否相关?

理论上,您可以使用自定义JNI扩展(本机代码的桥接)来获取文件在支持它的文件系统上的创建日期。

但是,最好使用Java SDK API中已有的可移植最后修改日期和/或“文件名中编码的创建日期”约定。

使用JNI会使您的程序无法移植,无法获得真正的额外好处。

答案 3 :(得分:1)

JNI绝对无关紧要,Apache POI也是如此,除非创建日期存储在文件本身(不太可能)。否则,它是外部元数据,可以通过HTTP标头访问(可能使用纯Java),也可以根本不访问。