对一个只有标准文件的目录实现拷贝,根据文件的个数开启对应个数的线程。
首先创建一个DirCopyByThread类,继承Thread类,重写run方法来创建线程。创建输入流FileInputStream和输出流FileOutputStream分别放入源文件和目标文件,通过read() 读取数据,在输出流写入数据完成拷贝。代码如下。
public class DirCopyByThread extends Thread{
/*需要被拷贝源文件/
private File f;
/*拷贝到的目标文件/
private File target;
public DirCopyByThread(File f,File target) {
this.f = f;
//根据目标目录,结合源文件名构建目标文件
this.target = new File(target,f.getName());
}
@Override
public void run() {
//try…with… java7新增 无需手动关闭流,自动关闭
try(
FileInputStream fis = new FileInputStream(f);
FileOutputStream fos = new FileOutputStream(target);
){
byte[] b = new byte[1024];
int len = 0;
//int read() 读取一个字节,返回是字节内容
System.out.println(getName()+“开始拷贝:”+f.getName());
while((len = fis.read(b)) != -1) {
fos.write(b, 0, len);
}
System.out.println(getName()+“拷贝完成!”);
}catch (IOException e) {
e.printStackTrace();
}
}
在main方法中放入源文件目录和目标文件目录,创建当前类的对象调用start()启动线程。在控制台中可以看见所有标准文件名称,显示被拷贝成功,在目标文件夹里可以看见所有被拷贝过来的标准文件。main方法代码如下。
public static void main(String[] args) {
//声明需要被拷贝源目录
File source = new File(“d:/tempfile”);
//声明需要存储到的目标目录
File target = new File(“d:/tempfile2”);
//获取目标目录中的所有子文件(标准文件,非目录)
File[] files = source.listFiles(f->f.isFile());
//循环遍历
for(File f:files) {
//创建并启动线程
new DirCopyByThread(f,target).start();
}