使用位元組流實現檔案複製
透過這裡我們需要了解計算機是如何處理中文的?
首先讀取一個位元組,如果認為沒有轉換,那麼系統是根據當前的編碼表來處理中文【中文的第一個數一般是負數】。當讀取位元組時,如果是整數,直接轉換成對應碼錶的字元;如果是負數,判斷編碼表,假設是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 協議》,轉載必須註明作者和本文連結