Java零基礎學java之IO流--05InputStream位元組輸入流

專注的阿熊發表於2021-07-08

package com.io_.inputstream_;

import org.junit.Test;

import java.io.FileInputStream;

import java.io.IOException;

public class FileInputStream_ {

     public static void main(String[] args) {

         /*

         * InputStream :位元組輸入流

         *   InputStream 抽象類是所有類位元組輸入流的超類

         *   InputStream 常用的子類

         *   1. FileInputStream : 檔案輸入流 ( 位元組 檔案 --> 程式 )

         *   2. BufferedInputStream: 緩衝位元組輸入流

         *   3. ObjectInputStream: 物件位元組輸入流

         */

     }

     //1. FileInputStream : 檔案輸入流 ( 位元組 檔案 --> 程式 )

     // read() 單個位元組的讀取,效率比較低

     //1. 先定義一個讀取檔案的方法

     @Test

     public void readFile01() {

         //2. 讀取檔案的路徑

         String filePath = "e:\\hello.txt";

         //3. 透過建立物件的方法 new FileInputStream() 用於讀取檔案 filePath

         int read = 0; // 判斷讀取完畢

         FileInputStream fileInputStream = null; // 擴大 fileInputStream 的作用域 ,方便後面關閉檔案流

         try {

             fileInputStream = new FileInputStream(filePath); // try/catch/finally 捕獲異常

             //4. read() 方法讀取 ( 單個位元組的讀取)

             // 從該輸入流讀取一個位元組 ( 用 外匯跟單gendan5.com while 迴圈來一直讀取 ) 的資料,如果沒有輸入可用,此方法將阻止

             // 如果返回 -1 表示讀取完畢

             while ((read = fileInputStream.read()) !=-1) {

                 System.out.print((char) read); //read() 返回的是 int 型別 , 要轉成 char

             }

         } catch (IOException e) {

             e.printStackTrace();

         } finally {

             //5. 關閉檔案流,釋放資源

             try {

                 fileInputStream.close(); //try/catch 捕獲關閉檔案流的異常

             } catch (IOException e) {

                 e.printStackTrace();

             }

         }

     }

     // read(byte[] b) 讀取檔案,提高效率

     @Test

     public void readFile02() {

         String filePath = "e:\\hello.txt";

         FileInputStream fileInputStream = null;

         // 定義一個字元陣列

         byte[] buf = new byte[8]; // 一次讀取 8 個字元

         //byte[] buf = new byte[1024] 裡面一般寫的是 1024 的整數倍

         // 定義讀取的長度

         int readLen = 0;

         try {

             fileInputStream = new FileInputStream(filePath);

             // 從該輸入流讀取最多 b.length 位元組的資料到位元組陣列。此方法將阻塞,直到某些輸入可用

             // 如果返回 -1 ,表示讀取完畢

             // 如果讀取正常,返回實際讀取的位元組數

             while (( readLen = fileInputStream.read(buf)) !=-1){

                 System.out.print(new String(buf,0,readLen));// byte[] 陣列型別轉成 String 型別輸出檔案資料 將讀取到的字元從 0 readLen 轉換

             }

         } catch (IOException e) {

             e.printStackTrace();

         } finally {

             try {

                 fileInputStream.close();

             } catch (IOException e) {

                 e.printStackTrace();

             }

         }

     }

}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2780392/,如需轉載,請註明出處,否則將追究法律責任。

相關文章