2012-07-21 88 views
0

我有一个web服务,它在服务器上产生一堆文件(比如说tomcat),它通过servlet的OutputStream被压缩并传输回客户端。在java web服务器上生成文件

这部分很清楚。我正在努力的部分是如何管理这些文件,以便如果两个客户端碰巧同时使用此功能。

我可以想到几种可能的解决方案,我不确定什么是处理这个问题的最简单和最好的方法,并且喜欢听到一些想法。

例如:我可以创建一个目录名称附加的时间戳,例如tmp_123142345并在完成将zip文件写入流后删除此文件夹。两个人不太可能会尝试在相同的毫秒内下载相同的文件。

但是,有没有更好的方法?

回答

0

这不太可能,但并非不可能。您可能会想要一个解决方案,您可以在会议中夸耀它无碰撞。 :)

有一个全球同步计数器或更好AtomicLong计数器。创建目录名称,如"tmp_"+ (atomicLongCounter.addAndGet(1))

因此,即使它们在相同的毫秒降落,每个目录都将具有唯一的目录。

+0

好吧,这有点更好,但几乎相同。我期待看看是否可能有更好的方法... – rbanikaz 2012-07-21 03:54:49

+0

AtomicLong超级酷,谢谢!我将使用'incrementAndGet' http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/atomic/AtomicLong.html#incrementAndGet() – rbanikaz 2012-07-21 07:22:48

0

我认为你的解决方案是可以的,但你真的不需要删除这些文件。您可以在任务管理器中编写一个负责每天删除所有这些文件的任务(只需清理目录)即可。看看here,有一些解决方案可以使目录清洁。

+0

那么,我担心过度泛滥目录。是的,我可以每天清理一次文件,但是谁知道当时是否有人可能正在下载文件? – rbanikaz 2012-07-21 03:56:41

+0

我明白你的观点,但你的应用程序在全球范围内仅用于你的位置?如果仅在您的位置使用它,您可以修复一段时间来运行任务,也许在黎明期间,减少某些用户正在下载某个文件的可能性。 – davidbuzatto 2012-07-21 04:00:12

+0

它是世界各地的...我可以找到一个缓慢的时期,但我不确定... – rbanikaz 2012-07-21 04:04:52

0

为什么不使用java.util.UUID?它会让你获得唯一的ID,你可以附加到文件名。

+0

是的,它也会工作...我真的希望找到一个更清洁的方式......也许它确实不存在 :) – rbanikaz 2012-07-21 04:07:18

0

您可以使用File类中的createTempFile方法。这将让Java为你创建一个独特的文件夹,你可以把你的文件...