1.完成基本文件复制
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.如何创建输入流
*
* File file1 = new File("e:/readme.txt");
InputStream fis = new FileInputStream(file1);
*
* InputStream fis = new FileInputStream("e:/readme.txt");
*
* 2.如何创建输出流
* File file2 = new File("e:/readme2.txt");
OutputStream fos = new FileOutputStream(file2);
*
* OutputStream fos = new FileOutputStream("e:/readme2.txt");
* 3.如何使用输入流和输出流
* n = fis.read();
* fos.write(n);
*
* 4.如何关闭流
*
* fis.close();
* fos.close();
* 流使用完毕一定要关闭,垃圾回收器无能为力
*
*
* @author Administrator
*
*/
public class TestCopy1 {
public static void main(String[] args) throws IOException {
//1.创建一个输入流和输出流
// File file1 = new File("e:/readme.txt");
// InputStream fis = new FileInputStream(file1);
//InputStream fis = new FileInputStream(new File("e:/readme.txt"));
InputStream fis = new FileInputStream("e:/readme.txt");
// File file2 = new File("e:/readme2.txt");
// OutputStream fos = new FileOutputStream(file2);
//OutputStream fos = new FileOutputStream(new File("e:/readme2.txt"));//默认覆盖
//OutputStream fos = new FileOutputStream("e:/readme2.txt");
OutputStream fos = new FileOutputStream(new File("e:/readme2.txt"), true);//追加
//2.使用输入流和输出流完成复制
//2.1准备一个中转站:水杯
int n; //
//2.2借助循环和中转站完成复制操作
n = fis.read(); //从文件中读取一个字节 byte
while(n != -1){
//写一个字节到目的文件(将水杯的水放入水缸)
fos.write(n);
//再读一个字节(再接一杯水)
n = fis.read();
}
//3.关闭输入流和输出流
fis.close();
fos.close();
}
}
2.完善文件复制--中转站使用字节数组
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:可以实现复制,但是汉字无法正常显示
* 缺点2:中转站太小,影响效率
* 缺点3:没有进行异常处理try-catch
*
* @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);
//InputStream fis = new FileInputStream(new File("e:/readme.txt"));
InputStream fis = new FileInputStream("e:/JDK_API_1_6_zh_CN.CHM");
// File file2 = new File("e:/readme2.txt");
// OutputStream fos = new FileOutputStream(file2);
//OutputStream fos = new FileOutputStream(new File("e:/readme2.txt"));//默认覆盖
OutputStream fos = new FileOutputStream("e:/JDK_API_1_6_zh_CN2.CHM");
//OutputStream fos = new FileOutputStream(new File("e:/readme2.txt"), true);//追加
//2.使用输入流和输出流完成复制
//2.1准备一个中转站:水桶
byte [] buf = new byte[1024];
//2.2借助循环和中转站完成复制操作
int len = fis.read(buf); //读取文件的内容到buf数组,返回的真正读取的字节数。文件结束,返回-1
while(len !=-1){
//写数组的内容到目的文件
//fos.write(buf);//写1024
fos.write(buf, 0, len);
//再读一次
len = fis.read(buf);
}
//3.关闭输入流和输出流
fis.close();
fos.close();
}
}
3.完善文件复制--进行异常处理
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;
/**
* 功能:使用文件字节流实现文件的复制
*
* 记住:使用字节流不仅可以复制文本文件(.txt, .java),
* 而且可以复制二进制文件(音频 视频 ....)
* 使用字节流可以复制所有文件
*
* doc文件是二进制文件
* @author Administrator
*
*/
public class TestCopy3 {
public static void main(String[] args) {
InputStream fis = null;
OutputStream fos = null;
try{
//1.创建一个输入流和输出流
fis = new FileInputStream("e:/JDK_API_1_6_zh_CN.CHM");
fos = new FileOutputStream("e:/JDK_API_1_6_zh_CN2.CHM");
//2.使用输入流和输出流完成复制
//2.1准备一个中转站:水桶
byte [] buf = new byte[1024];
//2.2借助循环和中转站完成复制操作
int len = fis.read(buf); //读取文件的内容到buf数组,返回的真正读取的字节数。文件结束,返回-1
while(len !=-1){
//写数组的内容到目的文件
//fos.write(buf);//写1024
fos.write(buf, 0, len);
//再读一次
len = fis.read(buf);
}
}catch(FileNotFoundException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//3.关闭输入流和输出流
try {
if(fis != null){
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(fos != null){
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}