如何在磁盘上存储文件并保证在Java中删除它们
我需要存储用户上传的文件。我被指示将其存储在磁盘上(而不是尝试使用数据库blob或缓存系统之类的花哨方法)如何在磁盘上存储文件并保证在Java中删除它们,java,file,unix,Java,File,Unix,我需要存储用户上传的文件。我被指示将其存储在磁盘上(而不是尝试使用数据库blob或缓存系统之类的花哨方法) 但从那以后,我需要弄清楚如何确保文件最终被删除(可能是在最后一次访问文件一小时后)。这是在Linux服务器上。那么,确保文件被删除的最佳方法是什么呢?最简单的方法是定期检查上传目录并删除所有超过一小时的文件 如果您这样做,您就不必担心在服务器重新启动时跟踪文件之类的事情 可能是这样的: File uploads = new File("/tmp/uploads"); FileFilte
但从那以后,我需要弄清楚如何确保文件最终被删除(可能是在最后一次访问文件一小时后)。这是在Linux服务器上。那么,确保文件被删除的最佳方法是什么呢?最简单的方法是定期检查上传目录并删除所有超过一小时的文件 如果您这样做,您就不必担心在服务器重新启动时跟踪文件之类的事情 可能是这样的:
File uploads = new File("/tmp/uploads");
FileFilter hourOld = new FileFilter() {
@Override
public boolean accept(File file) {
return file.lastModified() < System.currentTimeMillis() - 60 * 60 * 1000;
}
};
for (File file : uploads.listFiles(hourOld)) {
file.delete();
}
File uploads=新文件(“/tmp/uploads”);
FileFilter hourOld=newfilefilter(){
@凌驾
公共布尔接受(文件){
返回文件.lastModified()
您可以使用。来安排此操作。为了保证删除,我将运行一个单独的进程,该进程在启动时作为服务启动以删除文件。这样,即使您的程序未运行,它们也会被删除
通常,您需要做的就是确保在服务运行时删除文件。您只需确保文件已关闭,并且有一个后台线程定期检查上次访问的时间。有很多方法可以做到这一点:
- 您可以使用
find$path-daystart-mtime+1-execrm“{}”运行cron作业代码>-删除前一天创建的所有文件
- 无论何时上传文件,您都可以在Java中列出文件夹并删除所有太旧的文件
- 你可以添加到你的应用程序中来组合这两个选项
因为您使用的是Linux,所以文件锁定不会成为问题。您始终可以在Linux上删除文件,即使进程仍在使用它们(只要进程使用它,Linux就会保留该文件,并在以后将其删除)。我更喜欢使用cron4j,您可以在这里找到示例。该程序就是为了执行这项任务而设计的。请注意,如果使用noatime选项装入文件系统,它将无法正常工作。您可以使用临时文件。您可以定义是否应在VM终止时删除它们:
public static File createTempFile(String name, String suffix) {
try {
File temp = File.createTempFile(name, "." + suffix);
temp.deleteOnExit();
return temp;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
然而,没有强有力的保证,因为只有在定期终止时,删除才会成功