201521123072《java程序設計》第十二週學習總結

201521123072《java程序設計》第十二週學習總結

1. 本週學習總結

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

2. 書面做業

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

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

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

主要代碼:
寫入:

讀出:

運行結果:

編程

1.2 生成文件大小多少?分析該文件大小編輯器


分隔符:1個字節,換行符 2個字節,ID和age是兩個字節,score四個字節(100.0爲5個字節)
總共:12+9+62+(24+5)+3*2=52函數

1.3 若是調用PrintWriter的println方法,但在後面不close。文件大小是多少?爲何?學習

0字節,由於沒有了close方法,程序不能把緩衝區上的數據,經過flush方法輸出
參考:本題具體要求見流與文件實驗任務書-題目1-2.1測試

參考代碼:TextFileTest.java編碼

2. 緩衝流

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


使用BufferedReader更快,其有緩衝區,先將數據取入緩衝區,再輸出,減小了真正的底層I/O操做3d

2.2 將PrintWriter換成BufferedWriter,觀察寫入文件的速度是否有提高。記錄二者的運行時間。試分析緣由。


有提高,和上題解釋同樣,BufferedWriter有緩衝區

參考:本題具體要求見流與文件實驗任務書-題目1-2.2到2.3
參考代碼:BufferedReaderTest.java
JUnit4經常使用註解
JUnit4學習

3. 字符編碼

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

使用FileReader與BufferedReader將EncodeTest.txt的文本讀入並輸出:

運行結果:

緣由:
FileReader,BufferedReader只能按系統默認的字符集(如GBK)來解碼 ,可是該文件是按照UTF-8進行編碼 ,因此, 將UTF-8編碼的字符使用GBK編碼來解析,會出現亂碼
解決:
對於亂碼狀況,一般採起的措施是:在字節流和字符流之間進行轉換(InputStreamReader和OutputStreamWriter )
關鍵代碼:

運行結果:

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

測試以下:

輸出結果:

函數代碼爲:

參考:InputStreamReaderTest.java與教學PPT

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

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

主要代碼:
讀入:

讀出:

運行結果:

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


變大了,int類型的數據佔4個字節,double類型的數據佔了8個字節

4.3 使用wxMEdit的16進制模式(或者其餘文本編輯器的16進制模式)打開student.data,分析數據在文件中是如何存儲的。


分析以下:
|:7C
回車符:0A 0D
wendy:77 65 6E 64 79
72:37 32
18:31 38
100.0:31 30 30 2E 30
jane:6A 61 6E 65
76:37 36
22:32 32
98.0:39 38 2E 30
ann:61 6E 6E
77:37 37
24:32 34
89.0:38 39 2E 30

4.4 使用ObjectInputStream(讀), ObjectOutputStream(寫)讀寫學生。(截圖關鍵代碼,出現學號) //參考ObjectStreamTest目錄

參考:本題具體要求見流與文件實驗任務書-題目1-1

5. Scanner基本概念組裝對象

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

選擇BufferedReader,其將數據先取入緩衝區,再輸出,效率更高
主要代碼:

運行結果:

實驗文件:Students.txt
參考:TextFileTest目錄下TextFileTest.java

7. 文件操做

編寫一個程序,能夠根據指定目錄和文件名,搜索該目錄及子目錄下的全部文件,若是沒有找到指定文件名,則顯示無匹配,不然將全部找到的文件名與文件夾名顯示出來。
7.1 編寫public static void findFile(String path,String filename)函數,以path指定的路徑爲根目錄,在其目錄與子目錄下查找全部和filename相同的文件名,一旦找到就立刻輸出到控制檯。(截圖關鍵代碼,出現學號)

關鍵代碼:

運行結果:

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

使用隊列:
關鍵代碼:

運行結果:

7.3 選作:實現刪掉指定目錄及其子目錄下的全部空文件夾。

7.4 選作:將指定目錄及子目錄下的全部.java文件,轉化成UTF-8編碼格式,並測試。

參考資料:判斷文件的編碼格式

8. 正則表達式

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


運行結果:

8.2 選作:修改HrefMatch.java,嘗試匹配網頁中的數字字符串、匹配網頁中的圖片字符串。

參考:本題具體要求見流與文件實驗任務書-題目3
8.3 選作(較難):進一步改造上面的程序,得到圖片的連接,如IMG src="images/mail1.gif",而後通過處理,生成該圖片的實際連接地址http://cec.jmu.edu.com/images/mail1.gif。最後將生成的若干地址,放入一個隊列。編寫方法,能夠依照該隊列的全部圖片地址,一次將圖片下載下來。
正則表達式參考文章

3. 碼雲及PTA

3.1. 碼雲代碼提交記錄

3.2 PTA之前未完成的題目

相關文章
相關標籤/搜索