首页 > 代码库 > 8.拷贝文件
8.拷贝文件
- 大致思路
- 总结:
- 源码:
大致思路
拷贝文件思路很清晰
- 建立两个文件类对象,一头一尾,一头映射源文件,一头映射目的文件
建立两个流对象,真正的文件的搬运工.
首先,两个流得先知道他们是为哪个客户(文件)服务,所以new
的时候得告诉两个搬运工他们的服务对象(使用多态,1.扩大作用域 2.提高通用性)// 设立管道 InputStream indata = http://www.mamicode.com/null;>
对于输入流,使用它的读取能力(read函数),将读到的数据装箱
对于输出流,使用它的书写能力(write函数),将装箱的数据传送给目标文件,因为输入流将数据装箱分批读取,所以输出流就得循环读取while (-1 != (len = indata.read(data))) {//分箱传送 outdata.write(data, 0, len);// 循环读取 }
数据装箱
数据装箱,就是将源文件分块的传送出去,一次传固定的大小的数据,这样做的好处就是防止一次性读取完比较大的文件会内存溢出.(ip包的道理类似).
一个byte数组就像是一个装数据的箱子,设定箱子大小// 数据装箱传送 byte[] data = http://www.mamicode.com/new byte[1024];>
清尾工作
有一个问题,就是箱子虽然较小,如果文件比箱子还小,箱子就会装不满,这时候,也就是最后,需要确保数据全部传送完毕,所以会强制输出最后一个未装满的盒子.//强制刷出 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 = http://www.mamicode.com/null;>
8.拷贝文件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。