0

I have a root folder, and it contains a number of sub-directories, and each sub-directory contains only xml files (no other directories).. I need to make a program that returns the newest files added in (in all of the sub-directories) to be able to send them to ftp subscribers..

what's the best way to do that ?

I am able to look through one directory and sort all its files but I don't know how to do it for multiple sub-directories..and I need only the newest files, if i return all the files it will slow down the program.

Also, I need this program to be executed periodically, do I have to include this in the method it self, or create an other class for that ?

4

6 回答 6

1

这里有很多问题:

首先,关于目录树遍历。如果您能够阅读一个目录,那么您就可以阅读其中的任何一个。您将需要某种迭代或递归功能来读取文件的目录列表。对于作为目录本身的每个文件,您再次调用该函数并将其用作新根。为此,File 类中有一个 isDirectory() 方法。

至于新文件的识别,您需要保留(先前程序运行的)旧值并将它们与新值进行比较。或者您可以依赖文件修改时间并将它们与上次运行的时间进行比较。此日期之前的任何文件都将是新文件或上次运行后修改的旧文件。

至于让它定期运行,这取决于。您可以使用 serviceWrapper 将其设置为操作系统服务,或者您可以在容器中运行它,或者甚至将其作为独立运行,并在经过一段时间的延迟或等待或休眠后定期调用此函数。选项太多,信息太少,甚至无法建议什么是最好的。但它会是这样的,尽管如此。

于 2012-08-23T16:43:41.880 回答
1

使用新的 nio Watch Service API,您可以在目录内容更改时收到通知,而不是定期检查。这是有效的,因为它使用低级系统通知 API。

Oracle 文档:http ://docs.oracle.com/javase/tutorial/essential/io/notification.html

于 2012-08-23T16:37:11.663 回答
0

那么我会怎么做...

首先将当前时间戳存储在一个文件中,您将在下次调用时读取该文件,这将使程序知道它最后一次执行的时间。

现在读取时间戳并仅包含具有

file.lastModified() > lastTimeStampOfRun并归还它们。

要扫描所有文件和目录,您可以简单地使用 java IO。

于 2012-08-23T16:38:58.303 回答
0

1.获取文件列表的方式是使用File.listFiles().

2.现在编写一个Comparator使用File.lastModified()并将其与文件数组一起传递给Arrays.sort().

3.现在创建一个Thread在一定延迟后继续检查此更改....

于 2012-08-23T17:03:17.933 回答
0

我建议您使用 Apache Camel 实现您的应用程序。它完全是为像您这样的请求而制作的。有关概述,请参见http://camel.apache.org/ 。

您基本上使用 Spring DSL 或纯 Java 定义路由,并将消息路由到一个或多个能够对这些消息进行操作的端点。例如,从本地文件夹中获取文件并在它们出现后立即将它们推送到 FTP 是一个单一的线路。不需要做线程、Java IO 摆弄或其他你真的不想关心的事情。

例子

from("file://inputdir/?recursive=true&delete=false").to("ftp://user@host../folder/?password=xyz");
于 2012-08-23T17:03:22.637 回答
0

看起来需要FileMonitor 或 jnotify。

于 2012-08-23T17:43:15.707 回答