201521123098 《Java程序設計》第12周學習總結

1. 本週學習總結

  • 1.1 以你喜歡的方式(思惟導圖或其餘)概括總結多流與文件相關內容。正則表達式

    1. Input Stream —— 數據提供者可從其中讀數據輸出流;Output Stream —— 數據接收者可往其中寫數據;
      2. 字符流底層具體讀寫操做仍是使用字節流;
      3. InputStream、OutputStream是字節流全部類的父類定義了一些全部字節流共有的方法,屬於抽象類 —— 不負責具體的讀寫操做;
      4. 若是不關閉一個輸出流,一些數據可能會丟失,因此flush方法來強制寫出緩衝區的字符;
      5. 緩衝區能夠加快流的讀取或寫入速度;
      6. InputStreamReader和OutputStreamWriter在字節流和字符流之間進行轉換。

2. 書面做業

將Student對象(屬性:int id, String name,int age,double grade)寫入文件student.data、從文件讀出顯示。編程

1. 字符流與文本文件:使用 PrintWriter(寫),BufferedReader(讀)編輯器

  • 1.1 生成的三個學生對象,使用PrintWriter的println方法寫入student.txt,每行一個學生,學生的每一個屬性之間用|做爲分隔。使用Scanner或者BufferedReader將student.txt的數據讀出。(截圖關鍵代碼,出現學號)
    函數

  • 1.2 生成文件大小多少?分析該文件大小
    學習

    生成文件大小爲48字節,由於每行學生的信息加上格式符號「|」爲14字節,每一個換行符爲2個字節,即:(14+2)*3=16*3=48(字節)
  • 1.3 若是調用PrintWriter的println方法,但在後面不close。文件大小是多少?爲何?
    編碼

    文件大小變成了0字節,由於close方法的做用就是強制將緩衝區裏的數據傳如文件,而不close就會致使數據傳輸失敗以至數據丟失。

2. 緩衝流3d

  • 2.1 使用PrintWriter往文件裏寫入1千萬行(隨便什麼內容都行),而後對比使用BufferedReader與使用Scanner從該文件中讀取數據的速度(只讀取,不輸出),使用哪一種方法快?請詳細分析緣由?提示:可使用junit4對比運行時間
    code

    如圖,很明顯BufferedReader讀取數據的速度塊不少;
      由於Scanner每次的讀寫直接由文件中將數據逐個讀取;
      而BufferedReader當緩衝區空才真正進行文件數據的讀取;
      如此就比如玩過山車,一車滿滿的遊客一塊兒玩一趟總比一我的玩一趟快了不少倍。
  • 2.2 將PrintWriter換成BufferedWriter,觀察寫入文件的速度是否有提高。記錄二者的運行時間。試分析緣由。對象

    將rintWriter換成BufferedWriter後,寫入文件的速度有所提高,緣由同上。

3. 字符編碼blog

  • 3.1 現有EncodeTest.txt 文件,該文件使用UTF-8編碼。使用FileReader與BufferedReader將EncodeTest.txt的文本讀入並輸出。是否有亂碼?爲何會有亂碼?如何解決?(截圖關鍵代碼,出現學號)

    如圖,產生了亂碼;
      由於不一樣的語言編碼就應該用不一樣的譯碼器譯碼,由UTF-8編碼就應該用相應的譯碼器來譯碼後輸出,而.txt文本是用GBK天然是會亂碼。
      用如下方式更改代碼便可:

  • 3.2 編寫一個方法convertGBK2UTF8(String src, String dst),能夠將以GBK編碼的源文件src轉換成以UTF8編碼的目的文件dst。

4. 字節流、二進制文件:DataInputStream, DataOutputStream、ObjectInputStream

  • 4.1 參考DataStream目錄相關代碼,嘗試將三個學生對象的數據寫入文件,而後從文件讀出並顯示。(截圖關鍵代碼,出現學號)

    寫入文件:

    從文件輸出:

  • 4.2 生成的文件有多大?分析該文件大小?將該文件大小和題目1生成的文件對比是大了仍是小了,爲何?

    如圖,文件爲66字節;
      相比題目一輩子成的文件大了,由於二進制文件和文本文件的編碼方式不一樣;
      如對於二進制來講int型變量是4個字節,而在文本文件中int變量儲存的值爲1位就是1個字節。
  • 4.3 使用wxMEdit的16進制模式(或者其餘文本編輯器的16進制模式)打開student.data,分析數據在文件中是如何存儲的。

  • 4.4 使用ObjectInputStream(讀), ObjectOutputStream(寫)讀寫學生。(截圖關鍵代碼,出現學號)

5. Scanner基本概念組裝對象

  • 編寫public static List readStudents(String fileName)從fileName指定的文本文件中讀取全部學生,並將其放入到一個List中。應該使用那些IO相關的類?說說你的選擇理由。

    1. Scanner類——用於輸入文件中所提取的數據;
      2. File類——提取文件。

7. 文件操做

編寫一個程序,能夠根據指定目錄和文件名,搜索該目錄及子目錄下的全部文件,若是沒有找到指定文件名,則顯示無匹配,不然將全部找到的文件名與文件夾名顯示出來。

  • 7.1 編寫public static void findFile(String path,String filename)函數,以path指定的路徑爲根目錄,在其目錄與子目錄下查找全部和filename相同的文件名,一旦找到就立刻輸出到控制檯。(截圖關鍵代碼,出現學號)

  • 7.2 加分點:使用隊列、使用圖形界面、使用Java NIO.2完成(任選1)

    隊列:

8. 正則表達式

  • 8.1 如何判斷一個給定的字符串是不是10進制數字格式?嘗試編程進行驗證。(截圖關鍵代碼,出現學號)

3. 碼雲及PTA

  • 3.1. 碼雲代碼提交記錄

    • 在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖

      碼雲出問題了_(:3>L)_如下是pta這周的提交記錄:


  • 3.2 PTA之前未完成的題目

    如上。
相關文章
相關標籤/搜索