2017-04-03 8 views
1

私のプログラムでは、実行中にデータを入れるために一時フォルダが必要です。このデータはプログラムの終了後に必要ではなく、削除する必要があります。実行中のプログラムのインスタンスごとに1つのフォルダが必要です。起動時に一時ファイルを削除する

私はfile.deleteOnExit()を使用している場合、これは確かにファイルはどんな種類のクラッシュに削除されることはありません。私の考えは、起動時に削除されなかった古い一時ファイルをチェックして削除することです。しかし、プログラムの別のインスタンスを起動するときに、実行中のプログラムの一時ファイルを削除すべきではありません。どうすればこれを達成できますか?

。具体的に:一時ファイルはシステムの一時ディレクトリにある必要があり、プログラムが正常に終了した場合に削除する必要があります。この質問は、プログラムがクラッシュした数回だけです。プログラムはOSに依存しないものでなければなりません。 Fileクラスの代わりにPathを使用するソリューションが推奨されます。

答えて

0

まあ、私は、各アプリケーションの開始時に店舗一時ファイルが/var/run/myapp/tmpを言うプライベートディレクトリを作成することをお勧めします。

、スタート時にディレクトリの内容を削除します。

void purgeDirectory(File dir) { 
    for (File file: dir.listFiles()) { 
     if (file.isDirectory()) purgeDirectory(file); 
     file.delete(); 
    } 
} 

あなたはアプリの出口でディレクトリの内容を削除すること自由に残るが、この方法では、終了のクリーンアップでは正しく行われなかった場合でも、あなたは確信しています起動時に空のディレクトリを持つこと。

0

通常、あなたが一時ファイルのような他の一般的なリソースに依存する必要がある場合は、アプリケーションが複数のインスタンスを持つことができるように悪い考えです。たとえば、すでに2つのアプリケーションインスタンスがある場合、3番目のアプリケーションインスタンスは、それが3番目のインスタンスか他のインスタンスがまだ生存しているかどうかを判断するのが難しくなります。

JVMがクラッシュとJavaは自動的に一時ファイルをきれいにする信頼性の高い方法を提供していない場合は、deleteOnExit()しませんきれいな一時ファイルを述べてきたように。あなたが複数のウィンドウを使用してアプリケーションのインスタンスを1つだけ作成することを選択することができる場合

    • あなたが固定された場所を持っているとするとき、スタートアップ、それをきれいにすることができる

      は、だから私は、以下の提案を持っています。しかし、この方法では、Javaの移植性をあきらめることがあります。

    • アプリケーションがGUIアプリケーションの場合、Java APIを使用して一時ファイルを作成し、メインフレームを閉じるなどのクリーンアクションを登録することができます - まだいくつかのクラッシュ状況を処理できません。
    • shutdownHookいくつかのクラッシュ状況を処理できない
  • アプリケーションがGUIアプリケーションの場合は、Java APIを使用して一時ファイルを作成し、リスナーまたはshutdownHookを追加する必要があります。
+0

コードが設計されているため、提案したように異なるプロセスで複数のインスタンスを実行することはできません。これは良い考えです。 – piegames

+0

@piegames既に説明したように、終了時に一時ファイルを削除する信頼できる方法はないので、起動時に削除する必要があります。複数のインスタンスを持つことは、私が知る限り、この仕事をほとんど不可能にするでしょう。 – Tony

+0

プログラムは、タイムディレクトリ内のファイルにタイムスタンプを置き、毎分バックグラウンドスレッドで更新することができます。タイムスタンプが〜5分より古い場合、新しいインスタンスによってフォルダが削除されることがあります。 – piegames

関連する問題