import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 功能:使用文件字节流实现文件的复制
*
*
* @author Administrator
*
*/
public class TestCopy1 {
public static void main(String[] args) throws IOException {
//1.创建一个输入流和输出流
File file1 = new File("e:/JDK_API_1_6_zh_CN.CHM");
InputStream fis = new FileInputStream(file1);
BufferedInputStream bis = new BufferedInputStream(fis);//默认的输入缓冲区大小8192字节
File file2 = new File("e:/JDK_API_1_6_zh_CN2.CHM");
OutputStream fos = new FileOutputStream(file2);
BufferedOutputStream bos = new BufferedOutputStream(fos); //默认输出缓冲区大小8192字节
//2.使用输入流和输出流完成复制
//2.1准备一个中转站:水杯
int n; //
//2.2借助循环和中转站完成复制操作
n = bis.read(); //从文件中读取一个字节 byte
while(n != -1){
//写一个字节到目的文件(将水杯的水放入水缸)
bos.write(n);
//再读一个字节(再接一杯水)
n = bis.read();
}
//3.关闭输入流和输出流
bis.close();
fis.close();
bos.close();
fos.close();
}
}
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 功能:使用文件字节流实现文件的复制
*
* 总结1:节点流和处理流
* 节点流 FileInputStream FileOutputStream 直接和数据源和目的地相连接,不可缺少
* 处理流 BufferedInputStream BufferedOutputStream 不直接和数据源和目的地相连接
* 可以带来其他的好处:提高性能 简化操作
* 节点流:FileReader FileWriter
* 处理流:BufferedReader BufferedWriter
*
* 总结2:关闭流的时候直接关闭高层流即可,不需要关闭底层流
*
* 总结3:如何刷新输出缓冲区
* 1.bos.close() 关闭流的时候会同时刷新输出缓冲区
2.直接刷新 flush()
3.输出缓冲区满后,自动刷新
* 总结4:简化创建流的过程
* BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("e:/readme.txt")));
*BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("e:/readme2.txt"));
* @author Administrator
*
*/
public class TestCopy2 {
public static void main(String[] args) throws IOException {
//1.创建一个输入流和输出流
// File file1 = new File("e:/readme.txt");
// InputStream fis = new FileInputStream(file1);
// BufferedInputStream bis = new BufferedInputStream(fis);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("e:/readme.txt")));
// File file2 = new File("e:/readme2.txt");
// OutputStream fos = new FileOutputStream(file2);
// BufferedOutputStream bos = new BufferedOutputStream(fos);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("e:/readme2.txt"));
//2.使用输入流和输出流完成复制
//2.1准备一个中转站:水桶
byte [] buf = new byte[1024];
//2.2借助循环和中转站完成复制操作
int len = bis.read(buf); //读取文件的内容到buf数组,返回的真正读取的字节数。文件结束,返回-1
while(len !=-1){
//写数组的内容到目的文件
//fos.write(buf);//写1024
bos.write(buf, 0, len);
//再读一次
len = bis.read(buf);
}
//3.关闭输入流和输出流
bis.close();
// //fis.close();
bos.close();
//fos.close();
//bos.flush();
}
}