天天看點

Java-IO流-FileInputStream與FileOutputStreamJava-IO流-FileInputStream與FileOutputStream

Java-IO流-FileInputStream與FileOutputStream

  • FileInputStream,位元組輸入流,完成檔案内容讀取
    • FileInputStreamr.read()括号中不加任何參數,是單個位元組得讀取檔案内容
    • 可以使用緩沖數組一次讀取多個位元組,FileInputStream.read(b),b是byte類型的數組
    • FileInputStream.read()的傳回值是int類型,如果傳回值為-1的時候表示已經讀完了整個檔案
  • FileOutputStream,位元組輸出流,完成向檔案内寫入資料操作
    • FileOutputStream.writer()方法可以向檔案中寫入資料
      • 可以一個位元組一個位元組的進行輸出
      • 可以直接寫入一個byte類型的數組
    • 檔案的覆寫于追加
      • 檔案的覆寫于追加指的是在不同的流之間的操作,在同一個流中進行的輸出操作,都是追加
      • new FileOutputStream(f) 相當于對原檔案進行覆寫操作。
      • new FileOutputStream(f,false) 相當于對源檔案進行覆寫操作。不是追加。
      • new FileOutputStream(f,true) 對原來的檔案進行追加,而不是覆寫。
  • 注意:不要用位元組流去操作文本文檔
  • 示例:完成非文本檔案複制
public class Test02 {
    // 這是main方法,實作程式主要邏輯
    public static void main(String[] args) throws IOException {
        // 位元組流實作非文本文檔複制
        // 源檔案對象
        File f1 = new File("E:\\Study\\java_train_code\\JavaSE基礎\\CHICO.jpg");
        // 目标檔案對象
        File f2 = new File("E:\\Study\\java_train_code\\JavaSE基礎\\CHICO_copy.jpg");
        // 讀取檔案位元組流
        FileInputStream fis = new FileInputStream(f1);
        // 輸出檔案位元組流
        FileOutputStream fos = new FileOutputStream(f2);
        // 複制操作
        // 一個位元組一個位元組得讀取
        /*int n = 0;
        while ((n = fis.read())!=-1){// 如果傳回值為-1就表示檔案讀取完了
            fos.write(n);
        }*/
        // 緩沖數組進行複制
        byte[] b = new byte[1024*8];
        int len = 0;
        while((len = fis.read(b)) != -1){// 如果傳回值為-1,就表示檔案讀取完了
            fos.write(b, 0, len);
        }
        // 關閉流
        fos.close();
        fis.close();
    }
}