IO流中复制多级文件到指定目录下并将文件名修改为指定格式实例

package test5_copy;

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


/*
 * 功能:将文件夹a目录下的所有文件复制到a1文件夹中并将.java改为.jpg文件。
 * 		数据源:F:\a
 * 		目的地:F:\a1
 * 		步骤:
 * 			1、封装数据源以及数据目的地对象
 * 			2、判断数据源对象是否为文件夹
 * 				a、是文件夹
 * 					在目的目录下创建文件夹
 * 					获取此文件夹目录下的所有File对象,
 * 					遍历此File对象
 * 					利用递归办法重新判断是否为文件夹
 * 				b、是文件
 * 					判断是否是以.java结尾的文件
 * 					是:	利用数据字节流缓冲区以及字节数组将文件复制到指定目录下
 * 						进行重命名
 * 					否:	不进行操作
 * 		注:此处重命名虽然可以直接剪切,但是剪切效率太低,所以用字节缓冲流实现文件的复制
 */		
public class Demo {
	public static void main(String[] args) throws IOException {
		//注意必须在英文输入状态下输入文件路径尤其是冒号如果是中文的就不能创建文件
		
		//源文件,并不确定是文件还是文件夹
		File src=new File("F:\\a");
		
		//考入文件夹目录
		File dest=new File("F:\\a1");
		
		//如果目的文件夹不存在便创建此文件夹
		if(!dest.exists()) {
			dest.mkdir();
		}
		
		copy(src,dest);
	}

	private static void copy(File src, File dest) throws IOException {
		//newDest为复制目的地路径加上需要复制的文件或文件夹名字构成的File对象
		File newDest=new File(dest, src.getName());
		
		if(src.isDirectory()) {
			//创建文件夹
			newDest.mkdir();
			
			File [] fa=src.listFiles();
			for(File f:fa){
				copy(f,newDest);
			}	
		}else {		
			//复制文件
			copyFile(src,newDest);	
			//将文件改名
			if(newDest.getName().endsWith(".java")) {
				reName(newDest);
			}
		}		
	}
	
	//将文件改名
	private static void reName(File newDest) {
		
		String newName=newDest.getName().replace(".java", ".jpg");
		
		File newFlie=new File(newDest.getParentFile(),newName);
		
		newDest.renameTo(newFlie);
		
	}
	
	//复制文件
	private static void copyFile(File src, File newDest) throws IOException {
		BufferedInputStream bis=new BufferedInputStream(
				new FileInputStream(src));
		BufferedOutputStream bos=new BufferedOutputStream(
				new FileOutputStream(newDest));
		
		byte [] b=new byte[1024];
		int len=0;
		while((len=bis.read(b))!=-1) {
			bos.write(b, 0, len);
			bos.flush();
		}
		bos.close();
		bis.close();
	}	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值