文件字节流FileInputStream和FileOutputStream

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();
            }
        }
        
    }
}


 

猜你喜欢

转载自blog.csdn.net/qq_39209492/article/details/83591113