Java文件讀寫

相對於C++中的文件流操作,Java可以直接調用系統庫中提供的方法,簡單的多。

讀操作:

代碼:

        準備代碼:(由文件名獲取BufferrdReader對象)

String file_name = "test.txt";    //String類型變量file_name的值爲所讀取的文件的文件名(包括後綴)
File file = new File(file_name);    //用String類型變量初始化一個File類對象
FileInputStream fis = new FileInputStream(file);    //用File類對象初始化一個FileInputStream對象
/*FileInputStream對象可用String類型初始化,亦可省略第二行代碼,直接FileInputStream fis = new FileInputStream(file_name);*/
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);

//最後得到BufferedReader類型對象br

        讀取代碼:(通過調用BufferrdReader對象的方法進行文件讀操作)

br.readLine();//從文件流中讀取一行數據(讀到回車"\r\n"爲止),返回String類型
//可以通過System.out.println(br.readLine());在控制檯查看讀取的數據
//br.readLine()不包括回車字符"\r\n",對於只有回車的一行,br.readLine()==""(引號內部爲空)
//由於br.readLine()的返回值爲String類型,通過Java系統庫提供的強大的String方法可以對讀取的一行數據
//進行格式化拆分、整理(如按空格隔開數據,可用String類型的split方法將數據拆分存入String類型數組)

br.close();//當文件讀取完畢時,務必寫入該代碼,確保文件正常關閉

解釋:

讀操作是從文件開始的,Java提供了File類,可用String類型的文件名作爲形參初始化File對象,如File file=new File(“test.txt”),但這個File類對象只能訪問這個文件的外部特性,即查看文件屬性時能看到的東西,不能查看文件內的信息。

在C++中我們使用文件流來讀寫文件,Java也是如此。Java提供了FileInputStream類(譯作“文件輸入流”)(繼承自InputStream類),通過FileInputStream fis=new FileInputStream(file),調用形參爲File對象的構造函數(也有形參爲String的構造函數,直接輸入需要讀寫的文件名亦可)。之後fis變成輸入流對象,通過調用fis的方法可以發現,read(byte [])方法可以從文件中讀取一個byte類型數組的字節,並寫入該數組中。

通過FileInputStream對象,可以對文件進行字節讀取

 

這樣雖然可以讀取文件,但是還有很多問題。對於Ascii碼中的字符,字節讀取得到的是對應的int數組,轉換成Ascii碼較爲麻煩。對於中文等一個字節表示不了的文字,問題更多。我們需要對文件進行字符讀取,將文件內的信息轉化爲char[]或String類型。

 

我們將用到轉化類InputStreamReader類(繼承自Reader類),即將字節輸入流轉化爲字符輸入流。通過InputStreamReader isr=new InputStreamReader(fis),用FileInputStream對象初始化InputStreamReader對象。isr的方法即可將文件數據讀入char[]數組中。

 

最後我們再用InputStreamReader對象初始化BufferedReader對象,即BufferedReader br=new BufferedReader(isr),Buffered的意思是“緩衝的”,意義是在內存中開闢一個緩衝區,先將文件數據讀入緩衝區,再從緩衝區中將數據讀入Java,目的是使讀寫速度加快。BufferedReader對象的方法比InputStreamReader對象的方法多了一個很重要的readLine方法,它將所讀的一行數據(到回車爲止)以String類型的形式返回。由於Java提供了很多String對象的方法,所以readLine方法對於數據的處理意義重大。

 

筆者在代碼中強調了關閉文件對象的重要性,即br.close();

而前面聲明的 FileInputStream類對象fis 和 InputStreamReader類對象isr 都有close方法,爲什麼不用關閉呢?

因爲它們之間有嵌套關係:

BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(new File(file_name))));

對最後生成的對象br調用close方法後,Java會自動調用生成該對象的其他對象的close方法。

 

寫操作:

與讀操作同理,只是將Input變Output、Reader變Writer

String file_name = "test.txt";
File file = new File(file_name);
FileOutputStream fos=new FileOutputStream(file);
OutputStreamWriter osw=new OutputStreamWriter(fos);
BufferedWriter bw=new BufferedWriter(osw);
String str = "xxx";
bw.write(str);//將str中的字符寫入文件(不自動回車)

bw.newLine();//在文件中寫入一個回車,可用bw.write("\r\n");代替

bw.close();//關閉文件

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章