1. 程式人生 > >API-File型別,IO流,位元組流,緩衝流,資料輸出流

API-File型別,IO流,位元組流,緩衝流,資料輸出流

=============================================
File型別
   java.io.File型別,可以對硬碟上的檔案以及目錄,進行操作。
      如檢視檔案/目錄的屬性資訊,建立,刪除檔案/目錄。此型別
      不能檢視和修改檔案裡的內容。
常用構造器: 
   File(String pathname):
            指定一個路徑,建立一個File物件 
      
            路徑:
            (1)檔案的路徑,要寫到檔案的副檔名為止
            (2)目錄的路徑,要寫到當前目錄的名稱為止          
     
一、概念
       可以用來建立,刪除檔案/目錄,還可以檢視檔案/目錄的屬性資訊。
      但是不可以修改檔案裡的資料。如果需要修改,應該使用輸入/輸出流。
二、常用構造器
    File(String pathname)
        建立一個指定路徑的File物件
    File(File parent,String child)
       在指定parent路徑下,建立一個child的file物件
    File(String parent,String child)
       在指定parent路徑下,建立一個child的file物件
    
三、
       絕對路徑:是從根目錄開始寫的路徑
          window: 從碟符開始書寫:
                  D:\a\f1.txt
                  D:\a\b
          linux:  /home/scott/f1.txt
                  /home/scott        
       相對路徑: 相對某一檔案/目錄的路徑,不是從根路徑書寫。
          reg: f2.txt相對於a目錄的路徑:
          window:    b\f2.txt
          linux:     b/f2.txt
          reg: f3.txt相對於f2.txt的路徑
                  ../c/f3.txt
                          
             
              
四、常用方法 
    boolean exists();判斷指定的路徑是否存在
    boolean isFile();判斷指定路徑是不是檔案
    boolean isDirectory();判斷指定路徑是不是目錄
    String getName());獲取檔案/目錄名稱
    long lastModified();獲取檔案/目錄的最後修改時間
    boolean isAbsolute();判斷指定路徑是不是絕對路徑
    String getAbsolutePath();獲取絕對路徑
    String getParent();獲取父目錄的路徑
    long length();獲取檔案大小   
    
    檔案/目錄建立方法:
    boolean createNewFile();建立檔案
    boolean mkdir();建立目錄
    boolean mkdirs();建立多級目錄
    檔案/目錄的刪除方法
    boolean delete()
           可以刪除檔案,刪除目錄時,需要目錄下沒有檔案或子目錄
    File[] listFiles()
        獲取目錄裡的file物件

遞迴:
        遞迴思想:分成遞與歸。一層層遞進,最後再一層層歸。
    兩種遞迴:
      (1) 方法呼叫自己   
      (2)  方法A呼叫方法B,方法B呼叫A
  舉例:
     n*(n-1)*......*1                      
     
     z = f(n) 計算n的階乘
       = n*f(n-1)
       = n*(n-1)*f(n-2)
       = n*(n-1)*......*1
       
       f(n)是一個函式:
               裡的邏輯:
                n*f(n-1)
練習:
      斐波那契數列:  第n個數是第n-1個數與第n-2個數的和。
      
      1,1,2,3,5,8,13,.......
      
      計算第10個數的值。

===============================================
IO流:(Input,Output)
    我們在做專案時,除了自定義的一些資料外,還可能需要從"外界"
    引入資料,或者將資料匯出到"外界"。這時,我們需要I/O操作。
     外界:指的可能是  鍵盤,顯示器,硬碟,另外一個程式。
  輸入:又叫讀入操作
           資料時從"外界"流向程式
  輸出:又叫寫出操作
           資料時從程式流向"外界"

  流: 就是資料序列, 一經建立成功,就會開啟一個通道。所以使用完
       應該進行關閉操作。
IO流的分類:
   (1)按照流向分類:
           輸入流
           輸出流
   (2)按照處理的資料單位分類:
                位元組流
                字元流
   (3)按照功能分類:
                節點流:直接連線兩個裝置的流型別
                處理流:對節點流再次封裝與處理的流型別
======================================
位元組流:
       抽象父類 InputStream/OutputStream
檔案位元組流:
    FileInputStream/FileOutputStream
  
   (1)構造器:
        FileInputStream(File file) 
                建立一個指定路徑的File物件的檔案輸入流物件
        FileInputStream(String name) 
                建立一個指定路徑的字串的檔案輸入流物件
        常用方法:
    int read()
                 讀取該流中的一個位元組資料,即8位二進位制,儲存到一個int數
                 據的低八位上              
                 如果返回-1,讀至檔案末尾,
       long skip(long n)
               跳過流中n個位元組
    int read(byte[] b)
                讀取位元組存入byte陣列中,最多能讀b.length個位元組
                返回的是實際讀取的位元組個數
    int available()
                檢視此輸入流中剩餘的位元組數量
                
    (2)構造器
       FileOutputStream(File file) 
       FileOutputStream(File file, boolean append) 
       FileOutputStream(String name)
       FileOutputStream(String name, boolean append)
             建立一個指定路徑的輸出流物件,append表示在檔案末尾追加
        
       PS:如果指定路徑下的檔名不存在,會自動建立。
                    如果父路徑不存在,則報異常FileNotFoundException
             常用方法:
       void write(int b)
                   寫出引數b中的一個位元組,int型別的低八位。
       void write(byte[] b)
                   將位元組陣列b中的位元組按順序寫出
       void write(byte[] b,int off,int len)
                  將位元組陣列b中的位元組按順序寫出,從下標off,寫len個  

File:可以建立,刪除,檢視檔案/目錄的資訊。但是不
            能檢視/修改檔案裡的內容
刪除目錄時:需要注意使用遞迴思想(不能直接刪除不為空的目錄)
IO流:
       用途,傳輸資料。
       輸入:讀取資料
       輸出: 寫出資料
       流:資料序列
分類:
   (1)按照流向分類
   (2)按照處理的單位分類
   (3)按照功能分類
位元組流:
      抽象父類:
   InputStream:定義了位元組輸入流的常用方法
       int available()
       void close();
       int read():讀取一個位元組,存入int的低八位上,範圍是0-255
       int read(byte[] b):
                                    讀取位元組存入位元組陣列b中,返回的是讀取的有效位元組個數。
       int read(byte[] b,int off,int len)
       skip(int n);
   OutputStream:定義了位元組輸出流的常用方法
       void close();
       void flush();//沖刷,作用是將流的資料,沖刷進檔案中
       void write(int b);寫一個位元組
       void write(byte[] b);寫一個位元組陣列
       void write(byte[] b,int off,int len)
子類:
    FileInputStream/FileOutputStream
       繼承了位元組流的抽象父類。重寫了方法,並且提供了自己獨有的方法
       構造器:
       FileInputStream(File file)
       FileInputStream(String path)
    
       FileOutputStream(File file)
       FileOutputStream(File file,boolean append)
       FileOutputStream(String pathname)
       FileOutputStream(String pathname,boolean append)
      
       PS:所有的輸出流,對於指定的路徑中的檔案若是不存在,
                    都會自動建立。
===================================================
緩衝流:
    BufferedOutputStream:位元組緩衝輸出流
        在寫資料時,如果一個位元組一個位元組的寫,寫的次數明顯很多,效率就會變得很低。
        如何提高效率呢。
        緩衝輸出流的特點是:在流裡維護了一個緩衝區,寫位元組時,先將位元組
        寫入緩衝區, 當緩衝區滿時,再一次性的將資料寫到檔案裡。這樣就
        降低了寫的次數,因此提高了效率。
    
        因此緩衝輸出流缺失即時性,可以使用flush方法進行沖刷
    
        常用構造器:
        BufferedOutputStream(OutputStream out)
                建立一個指定位元組輸出流的緩衝流物件
        BufferedOutputStream(OutputStream out,int size)
                建立一個指定位元組輸出流的緩衝流物件,並設定緩衝區的大小
        PS:當一次寫的位元組超出緩衝區大小,會出現溢位情況,溢位的位元組
                      會先寫出到檔案中    
         
         常用方法:
        void write(int b):
                        寫int資料的低八位,寫入緩衝區內
        void write(byte[] b,int off,int len)
                        寫指定長度len的位元組陣列,寫入緩衝區  
                        
                        
                        
                        
    BufferedInputStream:位元組緩衝輸入流
       在讀取位元組時,也是一個位元組一個位元組的讀,次數多,效率低。
       使用緩衝輸入流,內部維護了一個緩衝區,預設8k,先一次性將緩衝區裝滿
       等待讀取.
       當將緩衝區的資料讀完,緩衝區再次儲存後續資料。讀取的次數明顯降低
        效率高      
     
       構造器:
       BufferedInputStream(InputStream is);
       BufferedInputStream(InputStream is,int size);
    常用方法:
       int read(byte[] bs)
              讀取緩衝區裡的位元組儲存bs中,
              當一次性得去的位元組小於緩衝區,我們是從緩衝區裡讀資料。
              此時,效率高  
                     
              當一次性讀取的位元組超出緩衝區大小。
              不使用緩衝區,直接從檔案裡讀。
        
       int read(byte[] bs,int off,int len)             
================================================
資料位元組流,與緩衝流一樣,父類都是過濾位元組流(
     FilterOutputStream/FilterInputStream    
         )
    這兩個類提供了幾個特殊的方法,可以直接寫基本資料型別


資料輸出流:DataOutputStream
    構造器:
    DataOutputStream(OutputStream os)
        建立一個指定位元組輸出流的資料輸出流物件
   
     常用方法:
            除了提供寫一個位元組和寫一個位元組陣列的方法外,還提供瞭如下方法      
      writeByte(int b)
      writeShort(int s) 
      writeInt(int i)
      writeLong(long l)
      writeFloat(float f)
      writeDouble(double d);
      writeChar(int c);
      writeBoolean(boolean b)
      writeUTF(String s);