十二、十三天總結筆記


一:File
  1.1
 File:文件和目錄(文件夾)路徑名的抽象表示形式。
 
  1.2
 File的構造方法:
                File(String pathname):把一個路徑名稱封裝成File對象
                File(String parent, String child):把一個父路徑和一個子路徑封裝成一個File對象
                File(File parent, String child):把一個父路徑File對象和一個子路徑封裝成一個File對象
 
                  
  1.3
   創建功能:
                A:創建文件
                         public booleancreateNewFile():如果文件不存在,就創建。否則,不創建。
                            需求:D盤下造一個文件a.txt
                B:創建目錄
                         public boolean mkdir():如果目錄不存在,就創建。否則,不創建。
                            需求:D盤下造一個文件夾test
                           public booleanmkdirs():如果目錄不存在,就創建。否則,不創建。
                                                                                   即時父目錄不存在,也可以連父目錄一起創建。
                            需求:D盤下造一個文件夾(D:/aaa/bbb/ccc)
                            需求:D盤下造一個文件夾("D:\\ddd\\eee\\f.txt");
package com.edu_01;
 
import java.io.File;
import java.io.IOException;
 
/**
  1.1
 File:文件和目錄(文件夾)路徑名的抽象表示形式。
 
  1.2
 File的構造方法:
                File(String pathname):把一個路徑名稱封裝成File對象
                File(String parent, String child):把一個父路徑和一個子路徑封裝成一個File對象
                File(File parent, String child):把一個父路徑File對象和一個子路徑封裝成一個File對象
 *
 */
public class FileDemo {
         publicstatic void main(String[] args) throws IOException {
                   //File(Stringpathname):把一個路徑名稱封裝成File對象
                   //Filefile = new File("D://a.txt");
                   //System.out.println(file.createNewFile());//當文件不存在的時候,創建文件,如果文件存在,不創建
                  
                   System.out.println("------------");
                   //File(Stringparent, String child):把一個父路徑和一個子路徑封裝成一個File對象
                   //Filefile = new File("D://test", "a.txt");
                   //java.io.IOException:系統找不到指定的路徑,
                   //創建文件的時候一定要保證路徑存在
                   //System.out.println(file.createNewFile());
                  
                   System.out.println("-----------------");
                   //File(Fileparent, String child):把一個父路徑File對象和一個子路徑封裝成一個File對象
                   Filefile = new File("D://test");
                   Filefile2 = new File(file, "a.txt");
                   System.out.println(file2.createNewFile());
                  
         }
 
}
 
   注意事項:
                A:你要造什麼東西,就應該用對應的方法。
 
        
  1.4
  刪除功能:
                public boolean delete():既可以刪除文件,又可以刪除目錄。
 
  路徑問題:
                A:絕對路徑     就是以盤符開始的路徑(d:\\test\\aaa\\b.txt)
                B:相對路徑     就是不以盤符開始的路徑(a.txt)
                                            一般都是相對應當前的項目而言的。
 
  注意事項:
                A:Java程序的刪除不走回收站。
                B:如果目錄內還有內容就不能刪除。
 
        
  1.5
  判斷功能
 public boolean isDirectory():是否是目錄
 public boolean isFile():是否是文件
 public boolean exists():是否存在
 public boolean canRead():是否可讀
 public boolean canWrite():是否可寫
 public boolean isHidden():是否隱藏
package com.edu_02;
 
import java.io.File;
import java.io.IOException;
 
/**
 *    1.5
  判斷功能
 public boolean isDirectory():是否是目錄
 public boolean isFile():是否是文件
 public boolean exists():是否存在
 public boolean canRead():是否可讀
 public boolean canWrite():是否可寫
 public boolean isHidden():是否隱藏
 */
public class FileDemo3 {
         publicstatic void main(String[] args) throws IOException {
                   //在D://a.txt
                   Filefile = new File("D://a.txt");
                   //System.out.println(file.createNewFile());
                   System.out.println("是否是目錄:"+file.isDirectory());
                   System.out.println("是否是文件:"+file.isFile());
                   System.out.println("是否存在:"+file.exists());
                   System.out.println("是否可讀:"+file.canRead());
                   System.out.println("是否可寫:"+file.canWrite());
                   System.out.println("是否隱藏:"+file.isHidden());
                  
         }
 
}
 
 
 
  1.6獲取功能
 public String getAbsolutePath():獲取絕對路徑
 public String getPath():獲取相對路徑
 public String getName():獲取名稱
 
 
二:字節流及字節高效流
2.1 I/O流的分類
 * IO流分類:
 *             流向:
 *                      輸入流
 *                      輸出流
 *             數據類型:
 *                      字節流
 *                               字節輸入流
 *                               字節輸出流
 *                      字符流
 *                               字符輸入流
 *                               字符輸出流
 *
 *             注意:一般我們在討論IO的分類時,默認是按照數據類型分的。
 *
 * 字節流:
 *             字節輸入流              InputStream(抽象類)
 *             字節輸出流              OutputStream(抽象類)
 * 字符流:
 *             字符輸入流              Reader
 *             字符輸出流              Writer
 *
 * 學習習慣:
 *             字節流
 *             字符流
 *
 
 2.2
 * 需求:請用字節流往一個文本文件中寫一句話:"helloworld"。
 * 分析:
 *             首先要知道是字節流
 *             寫數據我們就應該知道是字節輸出流
 *             所以最終選擇了OutputStream
 *             而OutputStream是抽象類,所以我們應該找其子類
 *             文件這個單詞是File,所以我們就大膽的猜測下:FileOutputStream存在否。
 *
 * 我們如何往一個文件寫數據呢?
 * 或者說就是字節輸出流的操作步驟是什麼呢?
 * A:創建字節輸出流對象
 * B:調用寫數據的方法
 * C:釋放資源
package cokm.edu_01;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
 
/**
 *  2.2
 * 需求:請用字節流往一個文本文件中寫一句話:"helloworld"。
 * 分析:
 *             首先要知道是字節流
 *             寫數據我們就應該知道是字節輸出流
 *             所以最終選擇了OutputStream
 *             而OutputStream是抽象類,所以我們應該找其子類
 *             文件這個單詞是File,所以我們就大膽的猜測下:FileOutputStream存在否。
 *
 * 我們如何往一個文件寫數據呢?
 * 或者說就是字節輸出流的操作步驟是什麼呢?
 * A:創建字節輸出流對象
 * B:調用寫數據的方法
 * C:釋放資源
 *
 */
public class OutputStreamDemo {
         publicstatic void main(String[] args) throws IOException {
                   /**
                    * 怎麼使用文件輸出流往文件中途寫數據?
                    * 1.創建文件輸出流對象
                    * 2.調用輸出流對象的方法給文件中寫數據
                    * 3.釋放資源
                    */
                   //publicFileOutputStream(String name)
                   //publicFileOutputStream(File file)
                   //創建文件輸出流對象
                   FileOutputStreamfos = new FileOutputStream("a.txt");
                  
                   //publicFileOutputStream(File file)
                   //Filefile = new File("a.txt");
                   //FileOutputStreamfos = new FileOutputStream(file);
                  
                   /**
                    * FileOutputStream fos = newFileOutputStream("a.txt");
                    * 做了那些事情?
                    * 1.創建fos對象指向文件a.txt
                    * 2.創建一個文件a.txt
                    */
                  
                   //調用輸出流的寫數據的方法給文件中寫數據
                   //publicvoid write(byte[] b)
                   byte[]byf = "helloworld".getBytes();
                   fos.write(byf);
                  
                   //釋放資源,關流操作
                   fos.close();
                  
                   //關流之後,我們還能繼續往文件中寫數據碼
                   //這樣是不行的。。
                   //fos.write("java".getBytes());//java.io.IOException:Stream Closed
                  
         }
 
}
 
做法:
A:  兩個構造的區別?
                 FileOutputStream(File file)
                   FileOutputStream(Stringname)
                   FileOutputStreamfos  = newFileOutputStream("fos.txt");
                   請問上面這個操作做了哪幾件事情?
                    * 1.創建了一個文件輸出流fos,指向文件a.txt
                    * 2.創建了a.txt這個文件
                  
B:     fos.write("helloworld".getBytes());
 
C:               fos.close();關流
 
D:           fos.write("java".getBytes());
 
2.3
FileOutputStream寫數據的方法
write(byte[] b)
write(int b) :一次寫一個字節
write(byte[] b, int off, int len) :一次寫一個字節數組的一部分
 
 
2.4
字節輸入流:
具體操作步驟:
 * 字節輸入流操作步驟:
 * A:創建字節輸入流對象
 FileInputStream  fis = new FileInputStream("a.txt");
 
 * B:調用方法讀取數據
 一次讀取一個字節:read()-- 測試讀取不到內容的時候的返回值(並且用循環改進)
 
 * C:釋放資源
 fis.close
 
 * 練習:
 *             A:把a.txt的內容複製到b.txt中
 *             C:把d:\\複製視頻文件
 
 * 數據源:
 *             IODemo.java   --       讀取數據         --       InputStream    --       FileInputStream       --       一次讀取一個字節
 * 目的地:
 *             Copy.java --       寫出數據         --       OutputStream-- FileOutputStream -- 一次寫一個字節
 
 
2.5
字節輸入流:
具體操作步驟:
 * 字節輸入流操作步驟:
 * A:創建字節輸入流對象
 FileInputStream  fis = new FileInputStream("a.txt");
 
 * B:調用方法讀取數據(一次讀取一個字節數組,提升效率)
 一次讀取一個字節數組:public int read(byte[] b):返回實際讀取長度,數據被讀取到數組中。
 -- 測試方法返回長度?根據String類的構造方法構造字符串
 * C:釋放資源
 fis.close
 
 
 2.5
 * 字節緩衝區流(也叫高效流):
 *             BufferedInputStream(read() 一次讀取一個字節,public int read(byte[] b):返回實際讀取長度,數據被讀取到數組中。)
 *             BufferedOutputStream(write(byte[]b))
 *
 * 流
 *             低級流: 基本的流,可以直接操作文件。
 *             高級流:是操作基本流的流。
 
 2.6
 * 字節流複製文件:
 * A:基本字節流一次讀寫一個字節             
 * B:基本字節流一次讀寫一個字節數組             
 * C:高效字節流一次讀寫一個字節             
 * D:高效字節流一次讀寫一個字節數組            
 
 獲取時間的方法:
 System.currentTimeMillis()
 
 
 三:編碼問題??
 
 *String中的編碼和解碼問題。
 *
 * 編碼:
 *             把我們能夠看懂的字符轉換爲看不懂的數據
 * 解碼:
 *             把我們看不懂的數據轉換爲看得懂的字符
 *
 * 舉例:
 *             電報/潛伏(餘則成 深海)
 *
 *             編碼表:
 *                      小本子,這個本子上記錄了很多的漢字和對應的數據值。
 *
 *             延安:
 *                      今晚興慶公園見
 *                     
 *                      發報員:
 *                               今晚興慶公園見
 *                               轉換成數據
 *             發送數據
 *            
 *             餘則成:
 *                      接收數據
 *                      記錄完畢後,就找出小本子,通過對應的數據值找到對應的字符
 *                      今晚興慶公園見
 
 
 public byte[] getBytes(StringcharsetName)  按照給定的編碼方式,編碼字節數組(gbk,utf-8)
 String(byte[] bytes, String charsetName) 按照給定的編碼方式解碼字符數組
 
                 String s = "中國好";
                   byte[]bytes = s.getBytes("utf-8");
                   System.out.println(Arrays.toString(bytes));
                  
                   //String(byte[]bytes, String charsetName)
                   System.out.println(newString(bytes,"gbk"));
 
 結論:用什麼編碼,就必須用什麼解碼。。
 
 
異常:
1.1
異常:就是程序出現的不正常的情況。
 
 * 異常:
 *             錯誤:這是非常嚴重的問題,一般我們處理不了,一般在這裏指的是硬件問題。
 *             異常:
 *                      編譯時期異常         開始就必須要處理的,如果不處理,後面就走不了。
 *                      運行時期異常         開始可以不用處理。這種問題一旦發生,就是我們的程序問題,需要我們修改程序。
 *
 * 體系結構:
 *Throwable:
 *             Error:
 *             Exception:
 *               非RuntimeException:編譯時期異常
 *                      RuntimeException:運行時期異常
 
 * 異常演示:
 *             除數不能爲0
 *
 *java.lang.ArithmeticException: / by zero
 *
 * 針對異常,JVM默認的處理方案:
 *             一旦遇到程序出現了問題,就會把問題的類名,錯誤原因,錯誤的位置等信息打印在控制檯,以便我們觀察。
 *             並且,會自動從當前出問題的地方停止掉。
 *
 * 這種處理方案雖然可以,但是不夠好。
 * 哪裏不好呢?
 *             其實程序出問題,不應該直接停止,因爲我們的程序可能是由多部分組成的,
 *             其中一個部分出問題了,不應該影響其他部分的執行。
 *             所以,我們應該想辦法讓其他的部分能夠執行下去。
 
 1.2
 
 * 我們是如何處理異常,保證各個部分不影響的呢?
 * 兩種方案:
 *             A:try...catch...finally
 *             B:throws
 *
 *try...catch...finally:
 *             try{
 *                      可能出現異常的代碼
 *             }catch(異常類名 變量名) {
 *                      針對異常的代碼處理
 *             }finally {
 *                      釋放資源的地方
 *             }
 *
 * 我們簡化一下第一個:
 *try{
 *             可能出現異常的代碼
 *   }catch(異常類名 變量名) {
 *             針對異常的代碼處理
 *   }
package com.edu_01;
/**
 *  * 我們是如何處理異常,保證各個部分不影響的呢?
 * 兩種方案:
 *     A:try...catch...finally
 *     B:throws
 * 
 * try...catch...finally:
 *     try{
 *         可能出現異常的代碼
 *     }catch(異常類名變量名) {
 *         針對異常的代碼處理
 *     }finally{
 *         釋放資源的地方
 *     }
 * 
 * 我們簡化一下第一個:
 * try{
 *     可能出現異常的代碼
 *  }catch(異常類名變量名) {
 *     針對異常的代碼處理
 *  }
 *
 */
publicclass ExceptionDemo3 {
    publicstaticvoid main(String[] args) {
       System.out.println("start");
       int a= 10;
       int b = 0;
       try{
           //可能出現異常的代碼
           System.out.println(a/b);//當除數爲0的時候會拋出ArithmeticException這個異常
                                //接着程序會拿着這個異常和catch裏面的異常類已經對比                  
       }catch(ArithmeticException e){
           //當程序拋出ArithmeticException這個異常之後給出的具體的處理方法
           System.out.println("你的除數不能爲0");
       }
       System.out.println("end");
    }
 
}
 
 
 1.3
 * 多個異常的處理(演示數組索引越界異常,除數爲0異常)
 * A:針對每一個出現問題的地方寫一個try...catch語句
 * B:針對多個異常,採用一個try,多個catch的情況。
 *             try...catch...catch...
 *
 *             遇到try裏面的問題,就自動和catch裏面進行匹配。
 *             一旦匹配就執行catch裏面的內容,執行完畢後,接着執行後面的代碼。
 *
 *             注意:
 *                      如果異常間有子父關係,父必須在最後。
 
 1.4
 * 編譯時期異常和運行時期異常的區別:
 * 編譯時期異常:Java程序必須顯示處理,否則程序就會發生錯誤,無法通過編譯
 *             FileNotFoundException(文件未找到異常)
 * 運行時期異常:無需顯示處理,也可以和編譯時異常一樣處理
 *             ArithmeticException
 
 1.5
 *Throwable中的方法:(演示除數爲0異常)
 *printStackTrace():打印異常信息,程序從出問題的地方開始就會打印創建一個該異常對應的對象,
   該對象直接調用打印方法
 
 1.6(演示編譯器異常,運行期異常)
 *try...catch 是直接進行了處理。
 * 而throws則是把異常處理的事情交給了調用者。
 *
 *throws用在方法上,聲明方法有異常,交給調用者處理。
 * 但是呢,如果是編譯時期異常,調用就必須處理。
 *              如果是運行時期異常,調用者可以處理,也可以不處理。
 
 1.7
 *throws:(演示文件未找到異常,除數爲0異常)
 *             用在方法聲明後面,跟的是異常類名
 *             可以跟多個異常類名,用,號隔開
 *             表示拋出異常,由該方法的調用者來處理
 *             throws表示出現異常的一種可能,並不一定會發生這些異常
 
 1.8
 * 異常處理:
 *try...catch...finally
 *
 *finally:一般用於釋放資源。在數據庫操作或者IO流比較常見。
 *
 * 特點:
 *             被finally控制的語句體一定會執行
 *
 *             特殊情況:在執行到finally之前jvm退出了(比如System.exit(0))
 
 1.9
 *finally相關的面試題:
 *final,finally的區別?
 *             final:最終的意思。可以修飾類,方法,變量。
 *                      修飾類,類不能被繼承
 *                      修飾方法,方法不能被重寫
 *                      修飾變量,變量是常量
 *             finally:
 *                      異常處理的一部分。被finally控制的代碼一定會執行。
 *                      特殊情況:在執行到finally之前,jvm退出了。
 
 1.9.1
 * 注意:
 *             A:子類重寫父類方法時,子類的方法必須拋出相同的異常或父類異常的子類。(父親壞了,兒子不能比父親更壞)
 *             B:如果父類拋出了多個異常,子類重寫父類時,只能拋出相同的異常或者是他的子集,子類不能拋出父類沒有的異常
                   C:如果被重寫的方法沒有異常拋出,那麼子類的方法絕對不可以拋出異常,如果子類方法內有異常發生,那麼子類只能try,不能throws
                  
                   上述僅僅針對編譯時期異常
                   與運行時期異常無關。
 
 1.9.2
 throw和throws的區別?
 *throws:
 *             用在方法聲明後面,跟的是異常類名
 *             可以跟多個異常類名,用逗號隔開
 *             表示拋出異常,由該方法的調用者來處理
 *             throws表示出現異常的一種可能性,並不一定會發生這些異常
 *
 *throw:
 *             用在方法體內,跟的是異常對象名
 *             只能拋出一個異常對象名
 *             表示拋出異常,由方法體內的語句處理
 *             throw則是拋出了異常,執行throw則一定拋出了某種異常?
 
案例演示:演示編譯時期異常(文件未找到異常)和運行時期異常(除數爲0異常)使用上的區別
 *throw:
 *             如果throw的是編譯時期異常,在方法聲明上必須用throws進行標記
 *             如果throw的是運行時期異常,在方法聲明上可以用throws進行標記,也可以不用。
package com.edu_03;
 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
 
/**
 *  throw和throws的區別?
 *throws:
 *             用在方法聲明後面,跟的是異常類名
 *             可以跟多個異常類名,用逗號隔開
 *             表示拋出異常,由該方法的調用者來處理
 *             throws表示出現異常的一種可能性,並不一定會發生這些異常
 *
 *throw:
 *             用在方法體內,跟的是異常對象名
 *             只能拋出一個異常對象名
 *             表示拋出異常,由方法體內的語句處理
 *             throw則是拋出了異常,執行throw則一定拋出了某種異常?
 *
 */
public class ThrowDemo {
         publicstatic void main(String[] args) {
                   method();
                   try{
                            method2();
                   }catch (FileNotFoundException e) {
                            e.printStackTrace();
                   }
         }
 
         privatestatic void method2() throws FileNotFoundException{
                   try{
                            FileInputStreamfis = new FileInputStream("D://a.txt");
                   }catch(FileNotFoundExceptione){
                            //當遇見這個異常之後,直接拋出(這就是我給出的處理方法)
                            //如果【拋出的是編譯時期異常的話,必須在方法聲明上給予聲明
                            thrownew FileNotFoundException();
                   }
 
         }
 
         privatestatic void method() throws ArithmeticException{
                   inta = 10;
                   intb = 2;
                   if(b==0) {
                            //在這裏拋出的是運行時期異常,拋出這個異常的同時,可以在方法聲明上給予聲明,也可以不聲明
                            thrownew ArithmeticException();
                   }else{
                            System.out.println(a/b);
                   }
         }
        
        
 
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章