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

package com.wjd.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;


/*
 *5.输入两个文件夹名称,将A文件夹内容全部拷贝到B文件夹,要求使用多线程来操作
 *A文件夹下面1、2、3、4、5
 *先人为的把需要拷贝的文件分成几份(开几条线程就分几份)
 *设计一个带同步锁的方法,获取一份文件
 */
//一个文件夹一个线程,弊端就是遇到文件特别多的时候效率会降低
public class Test5 {
	public static void main(String[] args) {
		ArrayList<File> list = new ArrayList<>();
		File f = new File("E:\\wjd\\A");//需要复制的文件夹路径
		File[] files = f.listFiles();//列出文件夹
		for (int i = 0; i < files.length; i++) {
			list.add(files[i]);
		}
		
		CopeFile copeFile = new CopeFile(list);
		RemoveFile  removeFile = new RemoveFile(copeFile);
		int n = list.size();
		for(int i = 0; i < n ; i++){//有几个文件创建几个线程
			new Thread(removeFile).start();
		}		
		System.out.println("复制完成!");
}
}

class CopeFile{
	ArrayList<File> list;//把文件存储在ArrayList集合中
	public CopeFile(ArrayList<File> list) {
		super();
		this.list = list;
	}
	public synchronized  File copy() {//设置同步锁让每个线程获取不同的文件
		if(list.get(0) != null){////
		return list.remove(0);//获得一个文件,则删除该元素,返回删除元素值,下一次再次访问第一个元素
		}
		return null;
	}
}


class RemoveFile implements Runnable{
	CopeFile copeFile;//创建CopeFile对象,内部成员变量list保存了子文件,对同一分对象进行操作
	public RemoveFile(CopeFile copeFile) {
		super();
		this.copeFile = copeFile;
	}
	public void run() {
		File file = copeFile.copy();
		if(file == null){
			Thread.currentThread().interrupt();//
		}else{
				try {
					//使用IO流读入和输出文件
					BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
					BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("E:\\wjd\\B\\"+file.getName()));
					String string=null;
					while((string = bufferedReader.readLine()) != null){
						bufferedWriter.write(string);
						bufferedWriter.flush();
					}
					bufferedReader.close();
					bufferedWriter.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}
		
		
		
	}
}

猜你喜欢

转载自blog.csdn.net/wjd_12345/article/details/81172049