2

私はすでに機能するコードを持っていますが、可能であれば実際に一時フォルダーを削除したくありません。私はapachefileutilsを使用しています。また、フォルダを削除から除外する方法を知っている人はいますか?

public class Cleartemp { 
    static String userprofile = System.getenv("USERPROFILE");
    public static void main(String[] args) { 
        try { 
            File directory = new File(userprofile+"\\AppData\\Local\\Temp");  
            // 
            // Deletes a directory recursively. When deletion process is fail an 
            // IOException is thrown and that's why we catch the exception. 
            // 
            FileUtils.deleteDirectory(directory); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
}
4

4 に答える 4

1

実際に再帰的な方法は次のとおりです。

public void deleteDirectory(File startFile, FileFilter ignoreFilter) {
    if(startFile.isDirectory())
        for(File f : startFile.listFiles()) {
            deleteDirectory(f, ignoreFilter);
        }
    if(!ignoreFilter.accept(startFile)) {
        startFile.delete();
    }
}

ディレクトリを削除しないように、ディレクトリ(以下を参照)に対してtrueを返すように設定されたファイルフィルタを渡します。他のファイルの例外を追加することもできます

    FileFilter folderFilter = new FileFilter() {

        @Override
        public boolean accept(File paramFile) {
            return paramFile.isDirectory();
        }

    };
于 2012-08-06T22:42:26.297 に答える
0

単純、

isDirectory()削除から除外するために使用します。

ここを参照してください:http://docs.oracle.com/javase/1.4.2/docs/api/java/io/File.html#isDirectory()

于 2012-08-06T22:39:29.177 に答える
0

FileUtils.cleanDirectoryはどうですか?ディレクトリを削除せずにクリーンアップします。

フィルタリングロジックが必要な場合は、ApacheCommonsDirectoryWalkerを使用することもできます。このページの例の1つには、FileCleaner実装が含まれています。

于 2012-08-06T22:59:12.367 に答える
0

初めての投稿ですが、自分を専門家とは見なさないでください。

これは、うまく機能する再帰的な削除方法です。親フォルダー内のすべてのファイルとサブフォルダーを削除し、次に親フォルダー自体を削除します。渡されるファイルは、私の場合のようにディレクトリであると想定します。

private void deleteTemp(File tempDir) {
    File[] a = (tempDir.listFiles());
        for (int i = 0; i < a.length; i++) {
            File b = a[i];
                if (b.isDirectory())
                    deleteTemp(b);

                b.delete();
        }

        tempDir.delete();
} 
于 2016-06-30T12:40:01.370 に答える