2009-04-12 47 views
3

我有一些CSV文件,我想每天从雅虎财经下载。我希望我的应用程序读取文件的创建日期(在我的计算机上,而不是服务器上)。如果创建日期早于今天,则应下载新文件(因为它将有新数据)。如果不是,那么不应该下载新文件,并且相关计算器(实质上是我的应用程序)应该使用上次下载的文件作为特定的股票代码。如何仅从服务器下载新文件?

我已经做了一些Google搜寻并找到了Apache POI项目。

这是最好的方式,是否有更好的方法,你会推荐什么。 JNI在这里与所有相关吗?

+0

我没有很好地解释这个问题,很抱歉。但看起来我们得到了一个解决方案,感谢那些回答。 – Ankur 2009-04-12 09:55:32

回答

4

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

或者我会尝试点你进入另一个方向:md5()或其他消息摘要算法可以帮助你。你不必依靠时间戳。尝试计算您所拥有的文件和即将下载的文件的md5()散列值。然后你知道是否要下载。

4

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

+0

对不起,我的解释可能并不清楚 - 我想检查创建日期,即我下载它的日期是否在今天之前,然后我想重新下载它(因为它有股票价格,它将每天更新)。我对服务器上的文件的修改日期没有真正的兴趣 – Ankur 2009-04-12 08:47:44

+0

If-Modified-Since技术适用于那种情况 – Ankur 2009-04-12 08:48:39

+0

我不明白它:除非您发明了时间机器,在下载文件后,下载日期只能在当前日期之前。 – 2009-04-12 09:01:02

1

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

2

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

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

您可以通过使用

public long lastModified() 

方法的文件对象上获取Java编写的。

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

如果绝对需要有一个文件创建日期,然后(如果你自己创建的文件,也可以让那些谁做),你可以按照约定在文件名中编码的创建日期,就像这样:myfile_2009_04_11 .csv格式。然后你将不得不分析文件名并确定创建日期。

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

Apache POI项目是一个用于读写MS Office文件(在这种情况下为Excel文件)的库。 CSV是一种简单的文本格式,因此您不需要POI来阅读它。

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

JNI与此相关吗?

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

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

使用JNI会让你的程序不能移植,因为没有真正的附加好处。