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