复制U盘指定文件到本地

1、
package com.gy_storm;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * 获取新增盘符
 * 一直进行监测
 * @author 001
 *
 */
public class GetNewRoot {
	//未插入可移动设备前的盘符
	private static final File[] systemRoots = File.listRoots();
	
	//获取新增盘符集合
	public  List<File> getNewRoots(){
		//用于存放插入移动设备后的所有盘符
		File[] nowRoots = null;
		//创建一个可变盘符集合,用于存放已经复制过的盘符和系统盘符
		List<File> copyNowRoots = new ArrayList<File>();
		
		//添加系统盘符
		for(File e : systemRoots){
			copyNowRoots.add(e);
		}
		
//		while(true){
			//获取插入移动设备后的所有盘符
			nowRoots = File.listRoots();
			
			if(nowRoots.length > copyNowRoots.size()){
				//存储新增盘符
				List<File> addRoot = new ArrayList<File>();
				
				for(File e : nowRoots){
					if(!copyNowRoots.contains(e)){
						//添加新增盘符
						addRoot.add(e);
						//将新增盘符添加至系统盘符中
						copyNowRoots.add(e);
					}
				}
				return addRoot;
			}	
//		}	
			return null;
	}

}
2、
package com.gy_storm;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * 新增盘符文件进行遍历
 * 匹配要复制的文件格式
 * 返回要复制的文件
 * @author 001
 *
 */
public class IsFileType {
	private static final String[] fileTypes = {"jpg","jpeg","png"};
	private List<File> addFiles = new ArrayList<File>();
	/**
	 * 传入File的是新增盘符
	 * @param file
	 */
	public List<File> isFileType(File file){
		if(null != file){
			//盘符内的文件(一级目录)
			File[] files = file.listFiles();
			//遍历,寻找匹配格式的文件
			for(int i = 0;i < files.length;i++){
				if(null != files[i]){
					if(files[i].isDirectory()){
						isFileType(files[i]);
					}else{
						if(isFileTypes(files[i])){
							//找到后进行复制
							addFiles.add(files[i]);
							//new CopyToSys(files[i]).doCopy();
						}
					}
				}
				
			}			
		}
		return addFiles;	
	}
	
	//文件格式是否匹配
	private boolean isFileTypes(File f){
		if(fileTypes == null || null == f){
			return false;
		}else{
			for(String type : fileTypes){
				if(f.getName().endsWith("."+type)){
					return true;
				}
			}
		}
		return false;		
	}

}

3、

package com.gy_storm;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyToSys {
	private static final String PATH = "C:\\USB";
	private File file = null;
	
	public CopyToSys(File file){
		this.file = file;
	}
	
	public void doCopy(){

		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		
		try{
			
			//创建目录
			File fPath = new File(getFileParent(file));
			if(!fPath.exists()){
				fPath.mkdirs();
			}
			
			bis = new BufferedInputStream(new FileInputStream(file));
			bos = new BufferedOutputStream(new FileOutputStream(new File(fPath,file.getName())));
			
			byte[] buf = new byte[1024];
			int len = 0;
			
			while((len = bis.read(buf)) != -1){
				bos.write(buf, 0, len);
				bos.flush();
			}
			
			
			
		}catch(FileNotFoundException e){
			e.printStackTrace();
		}
		catch(IOException e){
			e.printStackTrace();
		}catch(Exception e){
			e.printStackTrace();
		}finally{		
			try {
				if(bis != null)
					bis.close();
			} catch (IOException e) {
					e.printStackTrace();
			}
			try {
				if(bos != null)
					bos.close();
			} catch (IOException e) {
					e.printStackTrace();
			}
			
		}
	
	}

	private String getFileParent(File f) {
		StringBuilder sb = new StringBuilder(f.getParent());
		//文件路径中“/”的位置
		int i = sb.indexOf(File.separator);
		sb.replace(0, i, PATH);
		return sb.toString();
	}
}

4、

package com.gy_storm;

import java.io.File;
import java.util.List;

public class UsbMain {
	
	public static void main(String[] args) {
		//获取盘符
		while(true){
			GetNewRoot getNewRoot = new GetNewRoot();
			List<File> addRoot = getNewRoot.getNewRoots();
			IsFileType ift = new IsFileType();
			if(null != addRoot){
				for(int i = 0;i < addRoot.size();i++){
					//获取盘符下符合要求的文件
					List<File> addFiles = ift.isFileType(addRoot.get(i));
					for(int j = 0;j < addFiles.size();j++){
						//copy
						new CopyToSys(addFiles.get(j)).doCopy();
					}
				}
			}
			
		}
		
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值