201521123009 《Java程序设计》第12周学习总结
1. 本周學習總結(jié)
2. 書面作業(yè)
Q1:將Student對象(屬性:int id, String name,int age,double grade)寫入文件student.data、從文件讀出顯示
1. 字符流與文本文件:使用 PrintWriter(寫),BufferedReader(讀)
1.1 生成的三個學生對象,使用PrintWriter的println方法寫入student.txt,每行一個學生,學生的每個屬性之間用|作為分隔。使用Scanner或者BufferedReader將student.txt的數(shù)據(jù)讀出。(截圖關鍵代碼,出現(xiàn)學號)
1.2 生成文件大小多少?分析該文件大小
num 1字節(jié)
name 4字節(jié)
age 2字節(jié)
score 4字節(jié)
分隔符 3字節(jié)
行末 2字節(jié)
所以一共有:51字節(jié)
1.3 如果調(diào)用PrintWriter的println方法,但在后面不close。文件大小是多少?為什么?
如果調(diào)用PrintWriter的println方法,但在后面不close。文件大小是0字節(jié);因為close方法可以調(diào)用flush()來強制輸出緩沖區(qū)的數(shù)據(jù),沒有close方法,數(shù)據(jù)就在緩沖區(qū)丟失了。
Q2. 緩沖流
2.1 使用PrintWriter往文件里寫入1千萬行(隨便什么內(nèi)容都行),然后對比使用BufferedReader與使用Scanner從該文件中讀取數(shù)據(jù)的速度(只讀取,不輸出),使用哪種方法快?請詳細分析原因?提示:可以使用junit4對比運行時間
使用BufferedReader比使用Scanner從該文件中讀取數(shù)據(jù)的速度快,因為BufferedReader是把數(shù)據(jù)讀到緩存區(qū)然后在寫到硬盤里,減少了IO次數(shù),所以快。
2.2 將PrintWriter換成BufferedWriter,觀察寫入文件的速度是否有提升。記錄兩者的運行時間。試分析原因。
BufferedWriter比較快,因為BufferedWriter有緩沖區(qū)。
Q3:字符編碼
3.1 現(xiàn)有EncodeTest.txt 文件,該文件使用UTF-8編碼。使用FileReader與BufferedReader將EncodeTest.txt的文本讀入并輸出。是否有亂碼?為什么會有亂碼?如何解決?(截圖關鍵代碼,出現(xiàn)學號)
3.2 編寫一個方法convertGBK2UTF8(String src, String dst),可以將以GBK編碼的源文件src轉(zhuǎn)換成以UTF8編碼的目的文件dst。
參考:InputStreamReaderTest.java與教學PPT
Q4:字節(jié)流、二進制文件:DataInputStream, DataOutputStream、ObjectInputStream
4.1 參考DataStream目錄相關代碼,嘗試將三個學生對象的數(shù)據(jù)寫入文件,然后從文件讀出并顯示。(截圖關鍵代碼,出現(xiàn)學號)
4.2 生成的文件有多大?分析該文件大小?將該文件大小和題目1生成的文件對比是大了還是小了,為什么?
生成文件72字節(jié),比題目1生成的文件大,因為DataOutputStream寫入文件是按照不同的數(shù)據(jù)類型寫入,每個數(shù)據(jù)類型會占一定的大小。
4.3 使用wxMEdit的16進制模式(或者其他文本編輯器的16進制模式)打開student.data,分析數(shù)據(jù)在文件中是如何存儲的。
4.4 使用ObjectInputStream(讀), ObjectOutputStream(寫)讀寫學生。(截圖關鍵代碼,出現(xiàn)學號) //參考ObjectStreamTest目錄
參考:本題具體要求見流與文件實驗任務書-題目1-1
Scanner基本概念組裝對象
Q5:編寫public static List readStudents(String fileName)從fileName指定的文本文件中讀取所有學生,并將其放入到一個List中。應該使用那些IO相關的類?說說你的選擇理由。
實驗文件:Students.txt
使用BufferedReader,有緩存,速度高;然后要用InputStreamReader,因為要讀UTF-8格式的文件。
參考:TextFileTest目錄下TextFileTest.java
Q7:文件操作
編寫一個程序,可以根據(jù)指定目錄和文件名,搜索該目錄及子目錄下的所有文件,如果沒有找到指定文件名,則顯示無匹配,否則將所有找到的文件名與文件夾名顯示出來。
7.1 編寫public static void findFile(String path,String filename)函數(shù),以path指定的路徑為根目錄,在其目錄與子目錄下查找所有和filename相同的文件名,一旦找到就馬上輸出到控制臺。(截圖關鍵代碼,出現(xiàn)學號)
參考代碼:FindDirectories.java
參考:本題具體要求見流與文件實驗任務書-題目2
參考資料:判斷文件的編碼格式
Q8:正則表達式
8.1 如何判斷一個給定的字符串是否是10進制數(shù)字格式?嘗試編程進行驗證。(截圖關鍵代碼,出現(xiàn)學號)
參考:本題具體要求見流與文件實驗任務書-題目3
3. 碼云及PTA
3.1. 碼云代碼提交記錄
3.2 PTA以前未完成的題目
轉(zhuǎn)載于:https://www.cnblogs.com/z1450429983/p/6847528.html
總結(jié)
以上是生活随笔為你收集整理的201521123009 《Java程序设计》第12周学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 要出去找工作了,看看多线程和并行的区别及
- 下一篇: C# 7编程模式与实践