标签:
拷贝文件思路很清晰
建立两个流对象,真正的文件的搬运工.
首先,两个流得先知道他们是为哪个客户(文件)服务,所以new
的时候得告诉两个搬运工他们的服务对象(使用多态,1.扩大作用域 2.提高通用性)
// 设立管道
InputStream indata = null;
OutputStream outdata = null;
// 选择流
indata = new FileInputStream(scr);
outdata = new FileOutputStream(dest);
对于输入流,使用它的读取能力(read函数),将读到的数据装箱
对于输出流,使用它的书写能力(write函数),将装箱的数据传送给目标文件,因为输入流将数据装箱分批读取,所以输出流就得循环读取
while (-1 != (len = indata.read(data))) {//分箱传送
outdata.write(data, 0, len);// 循环读取
}
数据装箱
数据装箱,就是将源文件分块的传送出去,一次传固定的大小的数据,这样做的好处就是防止一次性读取完比较大的文件会内存溢出.(ip包的道理类似).
一个byte数组就像是一个装数据的箱子,设定箱子大小
// 数据装箱传送
byte[] data = new byte[1024];
int len = 0;//数据读取实际大小
清尾工作
有一个问题,就是箱子虽然较小,如果文件比箱子还小,箱子就会装不满,这时候,也就是最后,需要确保数据全部传送完毕,所以会强制输出最后一个未装满的盒子.
//强制刷出
outdata.flush();
所有传输完毕后,关闭两个流,原则是先打开的后关闭.
// 关闭流
outdata.close();
indata.close();
源文件------>程(:源文件代理-->输入流接手(流数据化)输出流接手-->目标文件:)序------>目的文件
package fileTest;
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;
/**
* 复制文件类
*
* @author Max
*
*/
public class FileCopy {
/**
*
* @param scrpath 源文件路径
* @param destpath 目的文件路径
* @throws IOException IO异常
* @throws FileNotFoundException 文件不存在
*/
public static void fileCopy(String scrpath, String destpath) throws IOException,FileNotFoundException {
fileCopy(new File(scrpath), new File(destpath));
}
/**
*
* @param scr 源文件
* @param dest 目标文件
* @throws IOException IO异常
* @throws FileNotFoundException 文件不存在
*/
public static void fileCopy(File scr, File dest) throws IOException ,FileNotFoundException{
//输入检查
if (!scr.isFile()) {
System.out.println("输入不是文件,请输入文件");
throw new FileNotFoundException("输入不是文件,请输入文件");
}
// 设立管道
InputStream indata = null;
OutputStream outdata = null;
// 选择流
indata = new FileInputStream(scr);
outdata = new FileOutputStream(dest);
// 数据装箱传送
byte[] data = new byte[1024];
int len = 0;//数据读取实际大小
// 循环读取
while (-1 != (len = indata.read(data))) {//分箱传送
outdata.write(data, 0, len);
}
//强制刷出
outdata.flush();
// 关闭流
outdata.close();
indata.close();
}
}
标签:
原文地址:http://www.cnblogs.com/maxtree/p/8-kao-bei-wen-jian.html