1.1 以你喜歡的方式(思惟導圖或其餘)概括總結多流與文件相關內容。正則表達式
1. Input Stream —— 數據提供者可從其中讀數據輸出流;Output Stream —— 數據接收者可往其中寫數據; 2. 字符流底層具體讀寫操做仍是使用字節流; 3. InputStream、OutputStream是字節流全部類的父類定義了一些全部字節流共有的方法,屬於抽象類 —— 不負責具體的讀寫操做; 4. 若是不關閉一個輸出流,一些數據可能會丟失,因此flush方法來強制寫出緩衝區的字符; 5. 緩衝區能夠加快流的讀取或寫入速度; 6. InputStreamReader和OutputStreamWriter在字節流和字符流之間進行轉換。
將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
1. Scanner類——用於輸入文件中所提取的數據; 2. File類——提取文件。
7. 文件操做
編寫一個程序,能夠根據指定目錄和文件名,搜索該目錄及子目錄下的全部文件,若是沒有找到指定文件名,則顯示無匹配,不然將全部找到的文件名與文件夾名顯示出來。
7.1 編寫public static void findFile(String path,String filename)函數,以path指定的路徑爲根目錄,在其目錄與子目錄下查找全部和filename相同的文件名,一旦找到就立刻輸出到控制檯。(截圖關鍵代碼,出現學號)
7.2 加分點:使用隊列、使用圖形界面、使用Java NIO.2完成(任選1)
隊列:
8. 正則表達式
3. 碼雲及PTA
3.1. 碼雲代碼提交記錄
在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖
碼雲出問題了_(:3>L)_如下是pta這周的提交記錄:
3.2 PTA之前未完成的題目
如上。