使用缓冲流实现文件的复制

来源:互联网 发布:mac flash 没有声音 编辑:程序博客网 时间:2024/05/21 19:20
package com.yuxinyicheng.java;


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


import org.junit.Test;


/*
 *基本的流                                节点流                              缓冲流(处理流的一种)
 *InputStream                     FileInputStream                   BufferedInputStream
 *OutputStream                  FileOutputStream                 BufferedOutputStream  (flush())
 *Reader                             FileReader                            BufferedReader            readLine();
 *Writer                              FileWriter                             BufferedWriter             (flush())  (newLine())
 * 
 * 总结:一般来说,我们在写的时候会使用缓冲流,因为缓冲流的效率高,
 *          对于非文本文件的会使用字节流,而文本文件的会使用字符流,因为效率高
 *         ②在使用缓冲流中,每次写入数据之后要flush()
 *            关闭资源的时候先关写入流的
 *         ③BufferedReader中有一个方法是读取一行的readLine()
 *            BufferedWriter中有一个方法是换行的newLine
 * */
public class TestBuffered {
@Test
public void test(){
String src="1.jpg";
String dest="2.jpg";
copy(src,dest);
}
//非文本文件的复制
public void copy(String src,String dest){
//3,创键写入和写出的缓冲流
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
try {
//1,创键写入和写出的文件
File file1=new File(src);
File file2=new File(dest);
//2,创键写入和写出的节点流
FileInputStream fis=new FileInputStream(file1);
FileOutputStream fos=new FileOutputStream(file2);
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
//4,执行读取和写入的操作
byte[] b = new byte[20];
int len;
while((len=bis.read(b))!=-1){
bos.write(b);
bos.flush();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{ //5,关闭流
if(bos!=null){
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(bis!=null){
try {
bis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

@Test
public void test1(){
String src="hello.txt";
String dest="hello2.txt";
copy1(src,dest);
}
//实现文本文件的复制
public void copy1(String src,String dest){
BufferedReader br=null;
BufferedWriter bw=null;
try {
File file1=new File(src);
File file2=new File(dest);
FileReader fr=new FileReader(file1);
FileWriter fw=new FileWriter(file2);
br=new BufferedReader(fr);
bw=new BufferedWriter(fw);
String str=null;
while((str=br.readLine())!=null){
bw.write(str);
bw.newLine();
bw.flush();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
if(bw!=null){
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(br!=null){
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

}
0 0