15

アプリケーションを閉じたときにディレクトリを削除できるかどうか疑問に思っていましたか?

アプリケーションが閉じているときに何かをする簡単な方法はありますか?

現在、私のアプリは実行時にクラスファイルをダウンロードするので、私が本当に探しているのは、クライアントシステムからそれらを削除するためのものです。

私はこれまで試しました

File directory = new File("macros/bin/");
directory.deleteOnExit();

ダウンロードしたスタートアップファイルの実行時に削除するだけでなく(実行するために必要なため、明らかに実行できません)。

4

5 に答える 5

22

あなたはこれを試すことができます:

Runtime.getRuntime().addShutdownHook(new Thread() {

      @Override
      public void run() {
        /* Delete your file here. */
      }
 });

プログラムがどのように終了するかに大きく依存します。

于 2012-06-22T23:12:20.813 に答える
10

ApacheCommonsIOを使用して次のことを行う必要があります。

Runtime.getRuntime().addShutdownHook(new Thread(() -> FileUtils.deleteQuietly(fileOrDir)));

注:FileUtils.forceDeleteOnExitの実装には欠陥があります。ディレクトリの登録中に削除するファイルを登録するため、後でファイルを追加すると、ディレクトリの削除に失敗します。

于 2016-02-04T22:32:07.317 に答える
9

念のために言っておきますが、javadocはそれが機能するdirectory.deleteOnExit()はずだと言っています...このメソッドはおそらくディレクトリに対して機能します。ただし、ディレクトリを削除しようとした時点でディレクトリが空ではないため、アプローチはおそらく失敗しています...そしてOSは通常、空でないディレクトリを削除することを許可しません。

deleteOnExit()解決策は、ユーザーがダウンロードするファイルも呼び出すことです。あなたは電話の後にこれをしなければなりません。directory.deleteOnExit()理由については、javadocを参照してください。

そうは言っても、明示的なシャットダウンフックはより堅牢なアプローチです。

于 2012-06-23T01:06:28.203 に答える
4

あなたはこれを使うことができます:org.apache.commons.io.FileUtils.forceDeleteOnExit(File)

/*
 * Schedules a file to be deleted when JVM exits.
 * If file is directory delete it and all sub-directories.
 */
FileUtils.forceDeleteOnExit(File)

制限:残念ながら、これは、呼び出された
後にディレクトリ内に追加のファイルやフォルダが作成されていない場合にのみ機能します。forceDeleteOnExit

于 2017-08-27T13:21:51.003 に答える
0

これは私のために働いた。再帰関数。

public static void makeVolatile(File folder)
{
    folder.deleteOnExit();
    for(File f : folder.listFiles())
    {
        if(f.isDirectory())
            makeVolatile(f);
        else
            f.deleteOnExit();
    }
}
于 2018-07-02T06:25:05.400 に答える