我每天都想从雅虎财务部门下载许多CSV文件。我希望我的应用程序读取文件的创建日期(在我的计算机上,而不是服务器上)。如果创建日期早于今天,则应下载新文件(因为它将具有新数据)。如果没有,则不应下载新文件,并且相关计算器(基本上就是我的应用程序)应使用最后下载的文件作为特定股票代码。
我做了一些谷歌搜索并找到了Apache POI项目。
这是最好的方式,有更好的方法,你会推荐什么? JNI在这里有关系吗?
答案 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),也可以根本不访问。