1. 程式人生 > >使用Java中的位元組流複製檔案

使用Java中的位元組流複製檔案

一.每次只讀取一個位元組,輸出一個位元組的方式來複制檔案,程式碼如下:

package com.xiao.CopyFile;

import org.junit.Test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
 * @Author 笑笑
 * @Date 20:32 2018/05/06
 */
public class CopyFile_01 {

    @Test
    public void test_01(){
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try{
            //檔案的起始位置
            fis = new FileInputStream("c:\\1.txt");
            //檔案將要複製到的位置
            fos = new FileOutputStream("d:\\1.txt");
            int len = 0;
            //每讀取一個位元組,寫入一個位元組
            while ((len = fis.read()) != -1){
                fos.write(len);
            }
        }catch(IOException e){
            throw new RuntimeException("檔案複製失敗!");
        }finally{
            try {
                fos.close();
                System.out.println("輸出流資源已釋放");
            }catch (IOException e){
                throw new RuntimeException("輸出流資源釋放失敗!");
            }finally {
                try{
                    fis.close();
                    System.out.println("輸入流資源已釋放");
                }catch (IOException e){
                    throw new RuntimeException("輸入流資源釋放失敗!");
                }
            }
        }
    }
}

二.使用讀取位元組陣列、輸出位元組陣列的方式來複制檔案(速度快),程式碼如下:

package com.xiao.CopyFile;

import org.junit.Test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
 * @Author 笑笑
 * @Date 20:52 2018/05/06
 */
public class CopyFile_02 {

    @Test
    public void test_01(){
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try{
            //檔案的起始位置
            fis = new FileInputStream("c:\\1.txt");
            //檔案將要複製到的位置
            fos = new FileOutputStream("d:\\1.txt");
            //定義位元組陣列
            byte[] b = new byte[1024];
            int len = 0;
            //複製檔案
            while((len = fis.read(b)) != -1){
                   //從陣列的0索引位置開始輸出,讀取到幾個有效位元組,輸出幾個有效位元組
                   fos.write(b,0,len);
            }
        }catch(IOException e){
            throw new RuntimeException("檔案複製失敗!");
        }finally {
            try{
                fos.close();
                System.out.println("輸出流資源已釋放");
            }catch (IOException e){
                throw new RuntimeException("輸出流資源釋放失敗!");
            }finally {
                try {
                    fis.close();
                    System.out.println("輸入流資源已釋放");
                }catch (IOException e){
                    throw new RuntimeException("輸入流資源釋放失敗!");
                }
            }
        }
    }

}