删除目录java中的文件类型

时间:2012-10-25 10:10:36

标签: java file error-handling directory delete-file

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

我正在使用此代码:

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

3 个答案:

答案 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 - ”实际文件名???