各位好,需求大致是这样的
由于业务量,
每天在某个文件夹下大概会增加1200个文件,平均大小为200K左右
在一个月大概就会存储1200*30 = 36000个文件现在有要求就是一个月清理一次
我使用的代码是ArrayList<File> files  = getFiles(); // 此处加载了所有的文件
for(File file : ArrayList){
    if(file.exists() && file.isFile()){
        file.delete();
    }
}
这样下来的话,每次删除都要循环3W多次?
效率是否会很慢?还有,如果我可以采用直接清除文件夹的方案,请问代码如何实现?
谢谢

解决方案 »

  1.   

    效率比直接删除文件夹低一点,循环耗费的时间。直接清除文件夹可以是这样.
    file.delete();
    file.mkdir();
    思路是先删除文件夹,再创建文件夹。
      

  2.   

    先删除这个目录而后在新建一个根目录File file  = new File("your_root")// 此处加载了所有的文件
    if(file.exists() && file.isDirectory()){
       file.delete();
    }
      

  3.   

    但是有个问题吧
    使用delete()方法的时候,如果该目录下不为空,则无法删除的
      

  4.   

    刚好写过一些测试(结果做了个递归,生成了一个120多层的目录,删都删不掉了)
    public void del(File file){
    if(file.listFiles()==null){
    file.delete();
    return;
    }else{
    File[] files = file.listFiles();
    for(File f: files){
      del(f);
    }
    }
    }
      

  5.   

    file.delete();
    不一定好使
    如果是Linux服务器下,最好写Shell脚本 rm命令删除
      

  6.   

    给个前两天为了把项目里.svn文件删除的dome你
    import java.io.File;
    public class DeleteFile{
    public static void main(String[]args)throws Exception{
    if(args==null||args.length<2){throw new RuntimeException("参数不对");}
    String filePath=args[0];//查找目录
    String fileName=args[1];//要删除的目录名
    searchFile(new File(filePath),fileName);

    }
    public static void searchFile(File f,String name){
    if(f.getName().equals(name)){
    deleteFile(f);
    }else if(!f.isFile()){
    File[] files=f.listFiles();
    for(int i=0;i<files.length;i++){
    searchFile(files[i],name);
    }
    }
    }
    public static void deleteFile(File fi){
    if(fi.isFile()){
    fi.delete();
    }else{
    File[] files=fi.listFiles();
    for(int i=0;i<files.length;i++){
    deleteFile(files[i]);
    }
    fi.delete();
    }
    }
    }
      

  7.   

    windows
    Runtime runtime = Runtime.getRuntime(); 
    String[] args = new String[] {"cmd.exe", "/c", "rd c:\\xxx /q /s"};
    Process proc = runtime.exec(args);linux
    Runtime runtime = Runtime.getRuntime(); 
    String[] args = new String[] {"sh", "-c", "rm -f -r /usr/dir"};
    Process proc = runtime.exec(args);
      

  8.   

    JAVA API里没有包含删除非空文件夹的方法,要实现的话,还得自己写一个。也得用循环。不知道有没有比较另类的,比较高效的方法?
      

  9.   

    顶上,觉得这种方式比较适合。JAVA自己处理的话貌似就要循环处理了。直接运行脚本吧