2

我已经有一个有效的代码,但如果可能的话,我不希望它实际删除临时文件夹。我正在使用 apache fileutils。还有谁知道如何排除文件夹被删除?

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

FileUtils.cleanDirectory怎么样?它清理目录而不删除它。

如果您需要一些过滤逻辑,也可以使用 Apache Commons DirectoryWalker 。该页面上的示例之一包括FileCleaner实现。

于 2012-08-06T22:59:12.367 回答
0

简单的,

用于isDirectory()将其排除在删除之外。

参考这里:http ://docs.oracle.com/javase/1.4.2/docs/api/java/io/File.html#isDirectory ()

于 2012-08-06T22:39:29.177 回答
0

第一次发帖,不要认为自己是专家,但我坚持使用 1.4 ......

这是一个很好的递归删除方法,删除父文件夹中的所有文件和子文件夹,然后删除父文件夹本身,假设传递的文件是一个目录,就像我的情况一样。

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 回答