2012-03-15 20 views
0

ユーザーがアップロードするファイルを保存する必要があります。私はディスクに保存するように指示されていました(データベースブロブやキャッシュシステムのように気を付けてください)。ファイルをディスクに保存してJavaで削除する方法

しかし、そこから、最終的にファイルが最終的に削除されていることを確認する必要があります。これはLinuxサーバー上にあります。だから、ファイルが削除されることを保証する最善の方法は何ですか?

答えて

1

最も簡単な方法は、アップロードディレクトリを定期的に調べ、1時間以上経過したすべてのファイルを削除するプロセスです。

このようにすると、サーバーを再起動してもファイルを追跡するようなことを心配する必要はありません。あなたはScheduledExecutorServiceを使用して、これをスケジュールすることができ

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(); 
} 

は次のようなものだろう。

1

削除を保証するため、起動時にファイルを削除するためのサービスとして開始する別のプロセスを実行します。これにより、プログラムが実行されていなくても削除されます。

通常は、サービスの実行中にファイルが確実に削除されるようにする必要があります。ファイルが閉じていることを確認するだけで、最後にアクセスされた時刻を定期的にチェックするバックグラウンドスレッドがあります。

2

これを行うには多くの方法があります。

  • あなたはfind $path -daystart -mtime +1 -exec rm "{}" \;でcronジョブを実行することができます - 前の日に作成されたすべてのファイルが削除されています。ファイルがアップロードされるたびに

  • 、あなたはJavaでフォルダを一覧表示し、次の2つのオプションを組み合わせて、あなたのアプリにQuartzを追加することができます

  • 古すぎるのすべてのファイルを削除することができます。

Linuxを使用しているので、ファイルのロックは問題になりません。 Linux上のファイルは、プロセスがそれを使用しているときでも、いつでも削除することができます(Linuxはプロセスがそれを使用している間はファイルを保持し、その後削除します)。私はcron4jを使用して希望

1

tmpwatchプログラムは、この正確なタスクを実行するように設計されています。 noatimeオプションを指定してファイルシステムをマウントしていると、正しく動作しないことに注意してください。

1

一時ファイルを使用できます。削除が唯一の通常の終了時に成功しますよう

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; 
} 

は、しかし強い島嶼地区などでは、ありません。彼らはVMの終了時に削除されます必要があります場合は、定義することができます。

関連する問題