Java多线程实现文件copy

package com.file.study;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.sql.Timestamp;

public class DirClass {
	public static void main(String args[]) throws Exception{
		File srcDir = new File("java");
		if(!(srcDir.exists() && srcDir.isDirectory()))
			throw new Exception("directory not exit");
		File[] files = srcDir.listFiles(new FilenameFilter() {
			public boolean accept(File dir, String name) {
				return name.endsWith(".java");
			}
		});
		
		System.out.println(files.length);
		File destDir = new File("jad");
		if(!(destDir.exists())) {
			destDir.mkdir();
		}
		
		System.out.println( new Timestamp(System.currentTimeMillis()));
		/*每个文件启动一个线程*/
		for(int i = 0; i < files.length; i++) {
			/*
			FileInputStream fis = new FileInputStream(files[i]);
			String destFileName = files[i].getName().replaceAll("\\.java$", ".jad");
			FileOutputStream fos = new FileOutputStream(new File(destDir, destFileName));
			copy(fis,fos);
			fis.close();
			fos.close();
			*/
			Copy c = new Copy(files[i]);
			c.start();
		}
		System.out.println( new Timestamp(System.currentTimeMillis()));
	}
	
	/*
	private static void copy(FileInputStream ips, FileOutputStream ops) throws Exception {
		int len = 0;
		byte[] buf = new byte[1024];
		while((len = ips.read(buf)) != -1) {
			ops.write(buf,0,len);
		}
	}
	*/
}

class Copy extends Thread {
	private File ifile;
	private File destDir;
	public Copy(File ips) {
		this.destDir = new File("test");
		if(!(destDir.exists())) {
			destDir.mkdir();
		}
		this.ifile = ips;
	}
	
	public Copy() {	
	}
	
	public void run() {
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			fis = new FileInputStream(ifile);
			String destFileName = ifile.getName().replaceAll("\\.java$", ".jad");
			fos = new FileOutputStream(new File(destDir, destFileName));
		
			int len = 0;
			byte[] buf = new byte[1024];
			while((len = fis.read(buf)) != -1) {
				fos.write(buf,0,len);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				fis.close();
				fos.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值