1. 程式人生 > >JAVA基礎複習(四)異常和IO

JAVA基礎複習(四)異常和IO

1、不應該讓方法來終止程式,應該由呼叫者決定是否終止程式,但是又要儘量使用if來進行簡單測試而不是異常處理來測試

2、異常是物件,而物件都採用類來定義,異常的根類是java.lang.Throwable

3、異常類主要分為三種類型:系統錯誤(JAVA虛擬機器丟擲,免檢異常)、異常(要被被捕獲和處理)、執行時錯誤(程式設計錯誤,免檢異常)

4、如果方法類沒有在父類中宣告異常,那麼就不能在子類中對其進行繼承來宣告異常

5、在catch塊中異常被指定的順序非常重要,父類應在子類的下面

6、使用finally子句時可以省略catch塊,finally塊之前有return語句,finally塊還是會被執行

7、和其他異常一起丟擲一個異常,稱為鏈式異常,異常沒有被當前方法捕獲,傳遞給呼叫者,這個過程不斷重複到異常被捕獲或傳遞給main方法

8、File類包含許多獲取檔案屬性的方法,以及重新命名和刪除檔案目錄的方法,無論檔案是否存在都可以建立這個例項

9、文字可使用PrintWriter寫資料:

Public class WriteData{
  public static void main(String[] args) throws IOException {
    java.io.File file=new java.io.File("xx.txt");
    if(file.exits()){
       System.exit(1);//檔案存在則退出
    }
   java.io.PrintWriter output=new java.io.PrintWriter(file);//建立檔案
   output.print("輸入檔案寫入的內容1");
   ...
   output.print("輸入檔案寫入的內容n");
   out.close();
   }
}
   

10、try(宣告建立資源){使用資源處理檔案;}即try-with-resources可以自動關閉資源

11、文字可使用Scanner讀資料:

 ...
  java.io.File file=new java.io.File("xx.txt");
  Scanner input=new Scanner(file);
  while(input.hasNext()){
    String xx=input.next();
    ...
    int xx=input.nextInt();
  }
  input.close();
 ...

12、二進位制I/O不涉及編碼解碼,效率比文字I/O更加高效,本質上來說,所有檔案都是二進位制檔案

13、FileInputStream和FileOutputStream用於從檔案讀取和輸入位元組,不同於File的是,如果試圖為不存在的檔案建立FileInputStream例項,將會發生IO異常,使用如:

...
try(FileOutputStream output=new FileOutputStream("xx.dat");){
 for(int i=1;i<=10;i++)
     output.write(i);//寫入1-10到xx.dat,不存在則自動建立,且將自動關閉資源
 }
try(FileInputStream input=new FileInputStream("xx.dat")){
  int value;
  while((value=input.read())!=-1)//讀取xx.dat裡面的資料,也將在結束以後自動關閉資源
    System.out.print(value+"");
 }
...

14、FilterInputStream和FilterOutputStream是過濾資料的基類,用於處理整數值、雙精度值和字串

15、DataInputStream和DataOutputstream處理基本資料型別和字串,是上一條的拓展類

16、EOFException異常檢查是否已經讀取到了檔案末尾

17、BufferedInputStream和BufferedOutputStream可以通過減少讀寫次數來提高輸入輸出效率,快取區預設512個位元組,100M以上檔案讀寫建議使用

18、物件I/O--ObjectInputStream和ObjectOutputStream用於讀寫可序列化的物件,實現基本資料型別、字串和物件的輸入輸出

19、提高效能可以向資料流中寫入多個物件或基本資料型別,如:

ObjectOutputStream output=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("xx.dat")));

20、可序列化物件的類必須實現Serializable介面,內在機制自動完成寫物件的過程,資料域加上transient關鍵字,反序列化實在ObjectInputStream類中實現

21、隨機訪問檔案通過RandomAccessFile類,可設定只讀和讀寫兩者模式(r,rw;在建構函式中完成)