-2

如何删除目录/文件夹中的文件

我正在使用这段代码:

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 删除:假

4

3 回答 3

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为要查找该文件的名称指定值时,它会根据您当前的位置做出假设(当然,除非您指定绝对路径)

于 2012-10-25T10:16:46.577 回答
0

使用此文件删除(不要在前面加上File.separator,父文件夹才是最重要的):

fileDelete = new File( dir, file );

它会起作用。dir.list(filter)只返回不带路径的文件名(例如目录名),如果dir不是当前工作目录,new File( file )则不会指向包含它的文件,new File( dir, file )将。

于 2012-10-25T10:16:55.783 回答
0

您正在遍历 中的文件列表folder,但这不是您尝试从中删除文件的地方。
顺便说一句:“31052012-TPBSDERG.cache -”是实际文件名吗???

于 2012-10-25T10:17:21.517 回答