如何删除目录/文件夹中的文件
我正在使用此代码:
private static final String FILE_DIR = "data\\session";
private static final String FILE_TEXT_EXT = ".cache";
private void DeleteCache(String folder, String ext){
GenericExtFilter filter = new GenericExtFilter(ext);
File dir = new File(folder);
File fileDelete;
String[] list = dir.list(filter);
for(String file : list){
String temp = new StringBuffer().append(File.separator).append(file).toString();
fileDelete = new File(temp);
boolean isDelete=fileDelete.delete();
System.out.println("File : "+temp+"is Delete : "+isDelete);
}
if(list.length == 0 ) return;
}
public class GenericExtFilter implements FilenameFilter{
private String ext;
public GenericExtFilter(String ext){
this.ext=ext;
}
public boolean accept (File dir, String name){
return (name.endsWith(ext));
}
}
但为什么是,如果,不希望删除缓存 示例错误
文件:\ 31052012-TPBSDERG.cache -is删除:false
答案 0 :(得分:1)
可能是因为该文件不存在。
尝试使用....
File[] list = dir.listFiles(filter);
相反
<强>更新强>
可能无法删除文件的原因有很多。实际过程取决于底层操作系统,但最常见的原因是,文件是由另一个进程(或您的程序)打开的,您没有正确的权限来删除文件和/或文件没有存在。
您的代码存在许多有趣的问题......
String temp = new StringBuffer().append(File.separator).append(file).toString();
这会将文件分隔符附加到文件中,该文件现在称为“查找当前驱动器根目录中的文件”,这可能(可能)不在文件所在的位置。
例如;
File dir = new File(System.getProperty("user.home"));
String[] list = dir.list(filter);
for(String file : list){
String temp = new StringBuffer().append(File.separator).append(file).toString();
System.out.println(temp + " - " + new File(temp).exists());
}
这会输出类似......
/.bash_history - false
/.CFUserTextEncoding - false
/.config - false
/.cups - false
这显然是错误的,这些文件不在根文件夹中
同样如果我这样做;
File dir = new File(System.getProperty("user.home"));
String[] list = dir.list(filter);
for(String file : list){
System.out.println(file + " - " + new File(file).exists());
}
这会输出类似......
.bash_history - false
.CFUserTextEncoding - false
.config - false
.cups - false
这同样没用,因为这些文件在当前执行位置中不存在......
但是,如果我做的话......
String folder = System.getProperty("user.home");
File[] list = new File(folder).listFiles();
for (File file : list) {
System.out.println(file + " - " + file.exists());
}
我明白了......
/path/to/home/.bash_history - true
/path/to/home/.CFUserTextEncoding - true
/path/to/home/.config - true
/path/to/home/.cups - true
显然,这更有用。
你必须记住,Java是愚蠢的,它不知道当你为一个名字指定String
值来查找该文件时,它会根据你当前的位置做出假设(除非你当然指定绝对路径)
答案 1 :(得分:0)
使用此文件删除(并且不在File.separator
前面,父文件夹是重要的):
fileDelete = new File( dir, file );
它会起作用。 dir.list(filter)
仅返回没有路径的文件名(例如目录名),如果dir
不是当前工作目录,new File( file )
将不会指向它所包含的文件,{{1}将来。
答案 2 :(得分:0)
您正在迭代folder
中的文件列表,但这是 NOT ,您尝试从中删除文件。
BTW:是“31052012-TPBSDERG.cache - ”实际文件名???