我有一个Web服务,它在服务器上生成一堆文件(比如tomcat),它们被压缩并通过servlet的OutputStream流回客户端。
这部分很清楚。我正在努力解决的部分是如何管理这些文件,以便在两个客户端碰巧同时使用此功能时。
我可以想到几个可能的解决方案,我不确定处理这个问题的最简单和最好的方法是什么,并且很想听到一些想法。
例如:我可以创建一个目录名称附加时间戳的目录,例如:在我将zip文件写入流后,tmp_123142345
并删除此文件夹。两个人不太可能尝试在同一毫秒内下载同一个文件。
但是,有更好的方法吗?
答案 0 :(得分:0)
这不太可能,但并非不可能。你可能想要一个你可以在董事会会议上夸耀它没有碰撞的解决方案。 :)
拥有全局同步计数器或更好的AtomicLong
计数器。创建目录名称,如"tmp_"+ (atomicLongCounter.addAndGet(1))
因此,即使它们以相同的毫秒落地,每个目录都会有唯一的目录。
答案 1 :(得分:0)
我认为你的解决方案没问题,但你真的不需要删除这些文件。您可以在任务管理器中编写一个任务,负责每天删除所有这些文件(只需清理目录)。看看here,有一些解决方案可以使de目录清理。
答案 2 :(得分:0)
为什么不使用java.util.UUID
?它将使您获得可以附加到文件名的唯一ID。
答案 3 :(得分:0)
您可以使用File类中的createTempFile方法。这将让Java为您创建一个独特的文件夹,您可以放置文件...