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

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

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

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

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

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

我有很多CSV文件,我想每天从雅虎财务中下载。 我希望我的应用程序读取文件的创建日期(在我的计算机上,而不是服务器上)。 如果创建日期早于今天,则应下载新文件(因为它将具有新数据)。

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

您可以使用Java在Java中获取它

public long lastModified() 

File对象上的方法。

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

如果您确实需要一个文件创建日期,那么(如果您自己创建文件或者可以询问那些文件)您可以按照约定在文件名中编码创建日期,如下所示:myfile_2009_04_11.csv。

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

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

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

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

JNI在这里有关系吗?

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

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

使用JNI将使您的程序无法移植,没有真正的额外好处。

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