多线程操作拷贝文件夹

该代码示例展示了如何在Java中通过多线程实现从一个文件夹到另一个文件夹的内容拷贝。程序首先定义了复制单个文件的方法,然后递归地复制整个目录结构。用户输入要拷贝的源文件夹和目标文件夹路径,程序启动两个线程进行拷贝操作。
摘要由CSDN通过智能技术生成

问题描述:

输入两个文件夹名称,将A文件夹内容全部拷贝到B文件夹,要求使用多线程来操作。

解决方案:

package cn.jit;

//输入两个文件夹名称,将A文件夹内容全部拷贝到B文件夹,要求使用多线程来操作。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class Test12 implements Runnable {
    public static void copyFile(File from,File to) throws IOException //复制文件
    {
        FileInputStream fis = new FileInputStream(from);
        FileOutputStream fos = new FileOutputStream(to);
        int tmp = 0;
        byte[] b = new byte[100];
        while((tmp = fis.read(b)) != -1)
        {
            fos.write(b,0, tmp);
        }
        fis.close();
        fos.flush();
        fos.close();
    }

    public static void copyDirectory(String from,String to) throws IOException //复制文件夹
    {
        File[] file = new File(from).listFiles();
        new File(to).listFiles();
        for(int i = 0;i < file.length;i++)
        {
            if (file[i].isFile()) {

                File sourceFile = file[i];

                File targetFile = new File(
                        new File(to).getAbsolutePath() + File.separator//File.separator 是系统默认的文件分隔符号
                                + file[i].getName());
                copyFile(sourceFile, targetFile);// 递归调用
            }
            if (file[i].isDirectory()) {

                String dir1 = from + "/" + file[i].getName();

                String dir2 = to + "/" + file[i].getName();
                copyDirectory(dir1, dir2);
            }
        }
    }

    public static void main(String[] args) throws IOException {
        Test12 t = new Test12();
        Thread t1 = new Thread(t);
        Thread t2 = new Thread(t);
        t1.start();
        t2.start();

    }

    @Override
    public void run() {
        synchronized (this)
        {
            Scanner input = new Scanner(System.in);
            System.out.println("请输入复制的文件夹:");
            String fromFile = input.next();
            System.out.println("请输入复制后的文件夹:");
            String toFile = input.next();

            File file1 = new File(fromFile);
            File file2 = new File(toFile);

            File[] filelist = file1.listFiles();//获取file1的文件或文件夹
            for(int i = 0;i < filelist.length;i++)
            {
                if(filelist[i].isFile())
                {
                    File tmp = new File(file2.getAbsolutePath() + File.separator + filelist[i].getName());
                    try {
                        copyFile(filelist[i], tmp);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(filelist[i].isDirectory())
                {
                    String source = file1 + File.separator + filelist[i].getName();
                    String target = file2 + File.separator + filelist[i].getName();
                    try {
                        copyDirectory(source,target);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万家林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值