IO_03_文件拷贝

IO_文件拷贝

文件拷贝就把上两文件输入输出和一起,还是四个步骤。
1.创建源,首先创建要拷贝的目标,还要创建一个目的地,也是要把东西拷到那个地方

File src = new File(srcPath);//源头
File dest = new File(destPath);//目的地

2.选择流

InputStream is = null;
OutputStream os = null;
				
is = new FileInputStream(src);
os = new FileOutputStream(dest,true);

3.操作,把源头里面的东西拷到目的地里面。

try {
					is = new FileInputStream(src);
					os = new FileOutputStream(dest,true); 
					//3.操作
					byte[] flush = new byte[1024];//缓冲容器
					int len = -1;
					try {
						while ((len=is.read(flush))!=-1) {
								os.write(flush,0,len);
								
							}
						os.flush();	
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					

4.释放资源,先打开的后关闭

finally{
					//先打开后关闭
					try {
						if (null != os) {
							os.close();
						}
						
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					try {
						if (null!=is) { //如果 is没有就不存在释放
							is.close();
						}
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}

完整的代码如下

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/*
 * 四个步骤:分段读取
 * 1.创建源 			选择房子
 * 2.选择流 			选择搬家公司
 * 3.操作     			选择用什么搬
 * 4.释放资源 		打发搬家公司
 */
public class Copy {
	public static void main(String[] args) {
		copy("src/io.txt", "src/test.txt");
		
	}
	public static void copy(String srcPath,String destPath){
		//1.创建源
				File src = new File(srcPath);//源头
				File dest = new File(destPath);//目的地
				//2.选择流
				InputStream is = null;
				OutputStream os = null;
				
				try {
					is = new FileInputStream(src);
					os = new FileOutputStream(dest,true); 
					//3.操作
					byte[] flush = new byte[1024];//缓冲容器
					int len = -1;
					try {
						while ((len=is.read(flush))!=-1) {
								os.write(flush,0,len);
								
							}
						os.flush();	
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}finally{
					//先打开后关闭
					try {
						if (null != os) {
							os.close();
						}
						
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					try {
						if (null!=is) { //如果 is没有就不存在释放
							is.close();
						}
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
	}
}

在这基础上我们可以把文件夹复制功能写出来。
当我们把一个文件夹复制后去目的地粘贴,首先先在目的地创建一个文件夹,如果要复制的文件,那我们要创建一个文件。如果文件夹里有文件夹和文件,我们就要在目的地创建,然后把里面的东西复制过去。
完整的代码如下

public class Copy02 {
	public static void main(String[] args) {
		copy("src/copy", "src/dir");
		
	}
	public static void copy(String srcPath,String destPath){
		
		//1.创建源
				File src = new File(srcPath);//源头
				File dest = new File(destPath);//目的地
				
				//创建文件
				if(src !=null && src.exists()){
					if (src.isFile()) {//如果是文件
						File copySrc = new File(dest.getPath());//创建文件
						System.out.println(dest.getPath());
						System.out.println(src.getName());
						System.out.println(copySrc.getPath());
						/*System.out.println(src.getName());
						System.out.println(copySrc.getPath());*/
						try {
							boolean flag = copySrc.createNewFile();
						} catch (IOException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
						//2.选择流
						InputStream is = null;
						OutputStream os = null;
						
						try {
							is = new FileInputStream(src);
							os = new FileOutputStream(copySrc); 
							//3.操作
							byte[] flush = new byte[1024];//缓冲容器
							int len = -1;
							try {
								while ((len=is.read(flush))!=-1) {
										os.write(flush,0,len);
									}
								os.flush();	
							} catch (IOException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							
						} catch (FileNotFoundException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}finally{
							//先打开后关闭
							try {
								if (null != os) {
									os.close();
								}
								
							} catch (IOException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							try {
								if (null!=is) { //如果 is没有就不存在释放
									is.close();
								}
							} catch (IOException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
						}
					}
					else {//如果是文件夹
						for (File s : src.listFiles()) {
							File copySrc = new File(dest.getPath()+"/"+src.getName());//创建文件夹
							copySrc.mkdirs();
							System.out.println(copySrc.getPath());
							System.out.println();
							copy(s.getPath(),copySrc.getPath()+"/"+s.getName());
						}
					}
				}
				
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值