[java IO流]之檔案複製

小杆子發表於2021-02-10

使用位元組流實現檔案複製

透過這裡我們需要了解計算機是如何處理中文的?

首先讀取一個位元組,如果認為沒有轉換,那麼系統是根據當前的編碼表來處理中文【中文的第一個數一般是負數】。當讀取位元組時,如果是整數,直接轉換成對應碼錶的字元;如果是負數,判斷編碼表,假設是GBK還會等待下一個位元組一起轉換成對應的字元,如果是UTF-8,就會等待下兩個位元組一起轉換成對應的字元。

檔案複製方式:

1.單個位元組來複製

步驟:

1.建立輸出流物件

2.建立輸入流物件

3.定義一個位元組,用來當做中間量

4.迴圈讀取,寫入

5.關閉流

FileInputStream  fis=new FileInputStream(new File("E:\\File\\1.txt"));//建立輸入流

  FileOutputStream fos=new FileOutputStream(new File("E:\\File\\copy.txt"));//建立輸出流

  //讀取

  int b;

  while ((b=fis.read())!=-1) {//讀取單個位元組,並作出判斷

      fos.write(b);//寫入單個位元組

      fos.flush();

  }

  fos.close();//關閉流

  fis.close();//關閉流
2.字元陣列來複製

步驟:

1.建立輸出流物件

2.建立輸入流物件

3.建立位元組陣列

4.用位元組陣列獲取,並且獲取長度(長度用來判斷,且用來控制寫入位元組陣列的長度)

5.從位元組陣列中寫入檔案(如果不用長度來控制的話,最後一次位元組陣列用不完,會將位元組陣列中預設的值寫入)

6.關閉流

public static void main(String[] args) throws IOException {

  FileOutputStream fos=new FileOutputStream(new File("E:\\File\\copy.txt"));//建立輸出流

  FileInputStream fis=new FileInputStream(new File("E:\\File\\1.txt"));//建立輸入流

  //讀取輸入流

  System.out.println(fis.available());//為了測試最初的有效位元組數

  byte[] b=new byte[1024];

  int len = 0;  

  while((len = fis.read(b))!=-1) {  //獲取長度來判斷

      fos.write(b,0,len);  //一定要用長度來控制寫入的位元組陣列

      fos.flush();

  }

  System.out.println(fis.available());//測試複製過後的有效位元組數

  fos.close();//關閉輸入流

  fis.close();//關閉輸出流

  }
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章