IO流——递归实现文件夹删除、拷贝

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/ItChuangyi/article/details/80999708

需求

实现单个文件的删除、拷贝计较简单,那么当文件夹下有文件和文件夹,有多层目录,应该怎么操作呢?是的,使用递归操作。
代码中用到FileInputStream、FileOutputStream进行流操作。

代码实现

删除文件夹及其子文件(夹)
/**
 * @Title: test1 
 * @Description: 删除文件夹及其子文件 
 * @throws Exception void
 * @author Cheng
 * @date 2018年7月11日上午11:34:22
 */
@Test
public void test1() throws Exception
{
    String path = "F:" + File.separator + "booway" + File.separator + "Java" + File.separator + "0711"
            + File.separator + "test";
    File file = new File(path);
    // 调用递归删除
    deleteAll(file);
}

// 递归删除
public void deleteAll(File file)
{
    if (file.isDirectory())//是文件夹
    {
        File[] files = file.listFiles();
        if (files.length > 0)
        {
            // 递归删除文件夹下文件或者文件夹
            for (File file2 : files)
            {
                deleteAll(file2);
            }
        }
        // 删除文件夹或文件夹
        file.delete();

    } else
    {//是文件直接删除
        file.delete();
    }
}
拷贝文件夹及其子文件(夹)
/**
 * @Title: test2 
 * @Description: 拷贝文件和文件夹
 * @throws Exception void
 * @author Cheng
 * @date 2018年7月11日上午11:33:55
 */
@Test
public void test2() throws Exception
{
    // 源路径
    String path1 = "F:" + File.separator + "booway" + File.separator + "Java" + File.separator + "0711"
            + File.separator + "test";
    File file1 = new File(path1);
    // 目标路径
    String path2 = "F:" + File.separator + "booway" + File.separator + "Java" + File.separator + "0711"+ File.separator + "test2";

    File file2 = new File(path2);

    if (!file2.exists())
    {
        file2.mkdirs();
    }
    // 调用拷贝拷贝
    copyAll(file1, file2);
}

// 递归拷贝
public void copyAll(File file1, File file2) throws Exception
{
    // 列出文件夹中文件或者文件夹
    File[] files = file1.listFiles();
    if (files.length > 0)
    {
        // 遍历
        for (File file3 : files)
        {
            System.out.println(file3);

            if (file3.isDirectory())//是文件夹,创该文件夹后再拷贝文件夹下的文件
            {
                // 创该新文件夹
                File file4 = new File(file2.toString() + "" + File.separator + "" + file3.getName());
                file4.mkdir();

                //递归
                copyAll(file3, file4);

            } else//是文件直接拷贝到当前目录
            {
                FileInputStream inputStream = new FileInputStream(file3);
                // 目标路径
                FileOutputStream outputStream = new FileOutputStream(
                        file2 + "" + File.separator + "" + file3.getName());

                /*byte[] b = new byte[1024];
                int len = 0;
                int temp = 0;
                // 读取文件
                while ((temp = inputStream.read()) != -1)
                {
                    b[len] = (byte) temp;
                    len++;
                }*/

                byte[] buffer = new byte[1024 * 1024];

                while (true)
                {
                    if (inputStream.read(buffer) <= 0)
                    {
                        break;
                    }
                    outputStream.write(buffer);
                }

                // 写文件
                // outputStream.write(b);
                // 关闭资源
                outputStream.flush();
                outputStream.close();
                inputStream.close();
            }
        }
    }
}

完…..

猜你喜欢

转载自blog.csdn.net/ItChuangyi/article/details/80999708