【问题标题】:Delete files type in directory java删除目录java中的文件类型
【发布时间】:2012-10-25 10:10:36
【问题描述】:

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

我正在使用此代码:

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

【问题讨论】:

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


    【解决方案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 值时,它会根据您当前的位置做出假设(除非您指定当然是绝对路径)

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        fileDelete = new File( dir, file );
        

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

        【讨论】:

          猜你喜欢
          • 2011-08-14
          • 2014-02-05
          • 2021-03-07
          • 1970-01-01
          • 1970-01-01
          • 2015-12-26
          • 2013-05-30
          • 2012-11-11
          • 2017-07-08
          相关资源
          最近更新 更多