以递归方式删除java中的文件夹

时间:2012-08-06 22:26:44

标签: java fileutils

我已经有一个可行的代码,但我不希望它实际删除临时文件夹(如果可能)。我正在使用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 个答案:

答案 0 :(得分: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();
        }

    };

答案 1 :(得分:0)

简单,

使用isDirectory()将其排除在外。

请参阅此处:http://docs.oracle.com/javase/1.4.2/docs/api/java/io/File.html#isDirectory()

答案 2 :(得分:0)

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

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

答案 3 :(得分: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();
}