0
点赞
收藏
分享

微信扫一扫

如何实现copy文件目录和删除文件目录(俗称:文件夹)

迎月兮 2022-04-05 阅读 76
java
package file;

import java.io.*;

/*
如何拷贝文件目录?
 */
public class CopyDirectory {
    public static void main(String[] args) {
        File src=new File("D:\\学习视频");
        File dest=new File("D:\\学习视频-new");
        copyDirectory(src,dest);
    }
    public static void copyDirectory(File srcDirectory,File destDirectory){
        InputStream inputStream=null;
        OutputStream outputStream=null;
        try {
            if (srcDirectory.isDirectory()) {//判断源目录是否是是目录
                if (!destDirectory.exists()) {//如果目标目录不存在的话,我们就去创建以你输入的这个抽象路径名命名的目录
                    destDirectory.mkdir();//mkdir()方法就是创建由此抽象路径名命名的目录
                }
                //然后去遍历源目录的整个目录下的所有内容
                String[] list = srcDirectory.list();//list()方法返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
                for (String file : list) {
                    File srcFile = new File(srcDirectory, file);//使用File类创建一个源文件对象,然后进行传参,把遍历到的内容传递给我们这个方法中传递的参数srcDirectory。
                    File destFile = new File(destDirectory, file);//使用File类创建一个目标文件对象,然后进行传参,把遍历到的内容传递给我们这个方法中传递的参数srcDirectory。
                    copyDirectory(srcFile, destFile);//然后使用递归的方法,一遍又一遍的进入这个方法,把遍历到的内容一个一个的复制到目标目录中。
                    //递归,就是自己调自己。
                }
            } else {//然后判断其它情况,如果源目录不是一个目录的情况下
                //如果源目录不是一个目录的情况下,那么它就是一个文件,文件的话,我们可以直接创建字节输入、输出流进行copy操作。
                //1.创建字节输入、输出流。
                inputStream = new FileInputStream(srcDirectory);
                outputStream = new FileOutputStream(destDirectory);
                //2.读写操作
                //使用缓冲区来存储数据,如果缓冲区满的时候,就一次性进行输出。
                byte[] buffer = new byte[1024];
                //存储每次读取到的字节数
                int len = 0;
                while ((len = inputStream.read(buffer)) != -1) {//然后去进行读入操作,如果读到文件末尾时为-1。
                    outputStream.write(buffer, 0, len);
                }
            }
            }catch (IOException e) {
            e.printStackTrace();
        }finally {
            //3.最后进行关流操作。(因为流是占用系统资源的,所以用完之后,最后一定要进行关流操作)
            if (outputStream!=null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (inputStream!=null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

package file;

import java.io.File;

/*
如何删除文件目录?
实现思路:先删除文件目录下的所有文件,再删除这个空的文件夹。
 */
public class Delete {
    public static void main(String[] args) {
       deleteAllFile("D:\\c");//先删除这个文件夹中的所有子文件
       deleteFolder("d:\\c");//最后再删除这个空的文件夹
    }
  public static boolean deleteAllFile(String filePath) {//这个方法就是删除文件目录下的所有文件
        boolean flag = false;
        File file = new File(filePath);
        if (!file.exists()) {//如果这个文件不存在就返回为false
            return flag;
        }
        if (!file.isDirectory()) {//如果这个文件不是一个目录也返回为false
            return flag;
        }
        String[] list = file.list();//返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。 因为我们要删除的就是目录中的文件和目录,所以用list()方法很合适
        File temp = null;//然后创建一个File类的temp对象为空的。
        for (int i = 0; i < list.length; i++) {//然后遍历这个字符串数组
            if (filePath.endsWith(File.separator)) {//如果你输入的这个文件路径是以分隔号结尾的
                temp = new File(filePath + list[i]);//那么就直接把这个输入的路径及路径下的文件给到这个temp
            } else {//如果你输入的文件路径不是以分隔号结尾的
                temp = new File(filePath + File.separator + list[i]);//那么你就要把文件路径+分隔号+路径下的子文件给到这个temp
            }
            if (temp.isFile()) {//然后进行判断,如果这个temp是文件
                temp.delete();//就进行删除
            }
            if (temp.isDirectory()) {//如果是目录
                deleteAllFile(filePath + "/" + list[i]);//就先删除这个文件夹中的所有子文件
                deleteFolder(filePath+"/"+list[i]);                                                //再删除这个空的文件夹
                flag=true;
            }
        }
        return flag;
    }
   public static void deleteFolder(String folderPath){//这个方法就是删除最后空的文件夹

            deleteAllFile(folderPath);//先删除这个文件夹路径下的所有文件
            String filePath=folderPath;//然后把这个输入的文件夹路径赋给这个String类型的字符串filePath
            //由于第一步我们就删除了这个文件夹路径下的所有文件,所以现在的这个filePath就是一个空的文件夹
            File myFilePath=new File(filePath);//然后我们再去创建File类对象把这个空的文件夹作为参数传进去
            //然后删除这个空的文件夹,因为delete()可以直接删除空的文件夹
            myFilePath.delete();
    }
    }

----------------------------------------------------------------------------------------
简单的写法:

package file;

import java.io.File;

public class DeleteDirectory {
    public static void main(String[] args) {
        File fileTwo=new File("d:\\a");
        deleteFile(fileTwo);
    }
    public  static void deleteFile(File file){
        File[] files = file.listFiles();
        for (File file1:files) {
            if (file1.isFile()) {//判断如果它是文件就直接删除
                file1.delete();
            } else if (file1.isDirectory()) {//如果它是一个目录,也就是文件夹中包含有子文件,
                deleteFile(file1);//然后我们就使用递归,自己调自己,一个一个的进行删除。
            }
        }
        file.delete();//最后删除这个空的文件夹
        }
    }
举报

相关推荐

0 条评论