Java 文件递归复制的失误与文件递归删除的补救

来源:互联网 发布:软件测试原则 编辑:程序博客网 时间:2024/05/18 07:07

复制文件夹的函数copy():

    private static void copy(File[] files,File dir){
        if(!dir.exists()){
            dir.mkdir();
        }
        for(int i=0;i<files.length;i++){
            if(files[i].isFile()){
                try{
                    FileInputStream fis=new FileInputStream(files[i]);
                    FileOutputStream out =new FileOutputStream(dir.getPath()+
                            File.separator+files[i].getName());
                    int count=fis.available();
                    byte[] data=new byte[count];
                    if((fis.read(data))!=-1){
                        out.write(data);
                    }
                    fis.close();
                    out.close();
                }
                catch(Exception e){
                    e.printStackTrace();
                }
            }
            if(files[i].isDirectory()){
                File desDir=new File(dir.getPath()+File.separator+files[i].getName());
                desDir.mkdir();
                copy(files[i].listFiles(),desDir);
            }
        }
    }

递归删除:
    private static void deleteFile(File file){

  //判断文件是否存在
        if(!file.exists()){
            System.out.println("File does not exist!");
            return;
        }

//如果是文件直接删除
        if(file.isFile()){
            boolean rs=file.delete();
            if(rs)
                System.out.println(file.getAbsolutePath()+" Delete success!");
            else
                System.out.println(file.getAbsolutePath()+" Delete failed!");
        }

//如果是文件夹首先判断是否为空,如果为空直接删除,否则递归操作
        else if(file.isDirectory()){
            File[] files=file.listFiles();
            if(files.length==0) {
                boolean rs=file.delete();
                if(rs)
                    System.out.println(file.getAbsolutePath()+"Delete file success!");
                else
                    System.out.println(file.getAbsolutePath()+"Delete file failed!");
            }else{
                for(int i=0;i<files.length;i++)
                    deleteFile(files[i]);
                deleteFile(file);  //对文件夹的内容删完后,再删除文件夹本身
            }
                
        }
        
    }