FileInputStream


一、FileInputStream()的使用步驟

第一步:
  1:打開流(即創建流)
第二步:
  2:通過流讀取內容
第三步:
  3:用完后,關閉流資源

  顯然Java中的一類對象,要打開流其實就是創建具體流的對象,由於是讀取硬盤上的文件,應該使用輸入流。所以找到了InputStream,但是InputStream是抽象類,需要使用它的具體實現類來創建對象就是FileInputStream。通過new 調用FileInputStream 的構造方法來創建對象。發現FileInputStream的構造方法需要指定文件的來源。查看構造方法,可以接受字符串也可以接受File對象。我們通過構建File對象指定文件路徑。

  使用流就像使用水管一樣,要打開就要關閉。所以打開流和關閉流的動作是比不可少的。如何關閉流?使用close方法即可,當完成流的讀寫時,應該通過調用close方法來關閉它,這個方法會釋放掉十分有限的操作系統資源.如果一個應用程序打開了過多的流而沒有關閉它們,那么系統資源將被耗盡.

二、如何通過流讀取內容?

 

查找api文檔通過read方法,查看該方法,發現有返回值,並且是int類型的,該方法一次讀取一個字節(byte

 

輸入流讀取方式1:

read方法()

一次讀取一個字節,讀到文件末尾返回-1.

仔細查看api文檔發現read方法如果讀到文件的末尾會返回-1。那么就可以通過read方法的返回值是否是-1來控制我們的循環讀取

 

  //一次只能讀取一個字節
    public static void readTest1() throws IOException{
        //找到目標
        File file=new File("E:\\A.txt");
        //建立數據的輸入管道
        FileInputStream fileInputStream=new FileInputStream(file);
        //開始讀數據
        int context=0;
        while((context=fileInputStream.read())!=-1){
            System.out.println((char)context);//一次只能讀一個字節
        }
        //關閉資源
        fileInputStream.close();
    }

 

輸入流讀取方式2:

使用read(byte[] b) 方法。使用緩沖區(關鍵是緩沖區大小的確定)

使用read方法的時候,流需要讀一次就處理一次,可以將讀到的數據裝入到字節數組中,一次性的操作數組,可以提高效率。

問題1:緩沖區大小

那么字節數組如何定義?定義多大?

通過read方法,往byte數組中存內容,那么該read方法返回的是往數組中存了多少字節

 

    //使用緩沖 數組 讀取      缺點:無法讀取完整一個文件的數據
    public static void readTest2() throws IOException{
        //找到目標文件
        File file=new File("E:\\A.txt");
        //建立數據的輸入通道
        FileInputStream fileInputStream=new FileInputStream(file);
        //建立緩沖字節數組,讀取文件的數據
        int length=0;
        //緩沖數組的大小一般是1024的倍數,因為與計算機的處理單位有關
        //理論上,數組越大,效率越高
        byte[] buf=new byte[3];//相當於超市里邊的購物車 
        while((length=fileInputStream.read(buf))!=-1){
            //如果使用read讀取數據傳入到了字節數組,數據是存儲到字節數組中的,read方法的返回值表示的是 本次讀取了幾個字節數據到字節數組中。
            String string=new String(buf,0,length);//一定要使用0,length。因為數組采用的是覆蓋,不限定范圍,就會出現內容錯誤。
            System.out.print("內容為"+string);
        }
        //關閉資源
        fileInputStream.close();
        
        
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM