標籤:njupt java io流
一、 實驗目的和要求
實驗目的和要求:要求學生能在學習和理解課堂學習內容中JAVA流編程理論的基礎上,學習並逐步掌握JAVA流程式的編寫和調試,學習根據處理需求對不同流的正確選擇使用和組合使用方法。
實驗內容:設計和編寫一個程式從鍵盤讀入一行字串,將其寫入一個文字檔中,再編寫另一個程式從文字檔中讀入字串並在命令列視窗顯示出來。
二、實驗代碼
寫入檔案
package think;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.ObjectInputStream.GetField;public class java_exp_03iostream {public static void main(String[] args) {//字元緩衝流BufferedReader br = null;BufferedWriter bw = null;try {//br=newBufferedReader(newFileReader("d:\\buffered.txt"));//從鍵盤讀取位元組流 轉化成字元流 封裝成緩衝字元流br= new BufferedReader(new InputStreamReader(System.in));bw = new BufferedWriter(new FileWriter("d:\\buffered.txt"));for(String str; (str= br.readLine() )!= null ; ){ if(str.equalsIgnoreCase("e")||str.equalsIgnoreCase("exit")){System.out.println("退出");break;}else {bw.write(str);bw.newLine(); //行分隔字元}}} catch (IOException e) {e.printStackTrace();// TODO: handle exception}finally //關閉兩個buffered對象{try {if(br != null)br.close();} catch (IOException e) {// TODO: handle exceptione.printStackTrace();}try {if(bw != null)bw.close();} catch (IOException e) {// TODO: handle exceptione.printStackTrace();}}}}<span style="font-weight: bold;"></span>
控制台輸入字串,輸入e退出,把字串寫入檔案。
第二個程式讀出檔案內容。
<span style="font-size:12px;"><strong>p</strong>ackage think;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class java_exp_03read {public static void main(String[] args) {BufferedReader br = null;try {br = new BufferedReader(new FileReader("d:buffered.txt"));for(String str; (str= br.readLine() )!= null ; ){ System.out.println(str);}} catch (IOException e) {// TODO: handle exceptione.printStackTrace();}finally{try {if(br != null)br.close();} catch (IOException e) {// TODO: handle exceptione.printStackTrace();}}}}</span>
三、實驗總結
IO流學習小結:
*FileInputStream
*FileOutputStream 位元組 檔案輸入輸出資料流
*FileReader
*FileReader 字元 檔案輸入輸出資料流
*Buffered+* 緩衝流類 屬於過濾流 封裝 檔案流 常用
*InputStreamReader
*OutputStreamReader 轉換流
*DataInputStream
*DataOutputStream 資料流
*PrintStream
*PrintWriter 列印流
*ObjectOutputStream
*ObjectInputStream 物件流程
整體的思路:
*檔案的輸入輸出有很多種方法可以實現,區別在於效率,字元的編碼不同,採用的方式可能也不同。
遇到的問題和解決的方法:
*問題: 最先採用的方法是FileInputStream,FileOutputStream。如果寫入的是英文或者數字,沒問題。如果是中文,則從檔案輸入的時候,有問題。輸出到檔案沒問題。百度+思考了一會兒,結果如下:unicode編碼時,中文是兩個位元組編碼的。用位元組流的方式從檔案讀進來的時候,遇到中文的字元,把中文拆成兩個位元組讀取,所以會亂碼。而位元組流輸出到檔案的時候,會根據平台的預設編碼方式把中文字元轉換成了位元組數組,一個位元組一個位元組的輸出檔案,windows記事本可以自動認出中文字元。所以,常值內容需要讀取的時候,一般不用位元組流。
* 最佳化:在用了字元流輸入輸出之後,又用了緩衝流,來提高效率。先把讀取或者寫入到檔案的內容,先儲存在緩衝數組裡,一次性寫入或者輸出,提高了效率。在我寫的程式可以很好的體現出來:比如,我在從console寫字元到檔案的時候,輸入 e 或者 exit結束,再沒有輸入e 和exit的時候,開啟buffered的時候,會發現是沒有內容的。結束之後,才顯示內容。
* 心得:C,C++檔案的輸入輸出都學過,但是由於平時很少寫小軟體,所以沒用到這個。但是輸入輸出很重要。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
NJUPT JAVA語言 流處理常式設計