JAVA學習——IO操作(三)
因爲大部分時間是對文件的操作,所以在此以對文件的操作爲例介紹一下IO程序的基本步驟。
基本步驟總結如下:
1、 創建IO對象(在創建對象的過程中要注意指定目的文件,一般是通過構造函數,所以瞭解各個IO類的構造函數很重要)
2、 調用IO對象對應的IO方法(read(),write()等)將數據寫入輸入或輸出流,IO方法有很多重載形式,需要按需選擇。
3、 調用Flush方法或close()方法,對流中的數據進行刷新,以達到將數據寫入目的文件的效果。(Flush方法與close() 方法的區別:flush刷新後可以繼續使用而流不被關閉,close刷新後,會將流關閉)
4、 最後要將流關閉,做法是調用close()方法。(在這裏我有一個疑問,使用標準輸入輸出System.in 與 system.out時,是沒有顯式的刷新和關閉流操作的,是被封裝了嗎?)
示例程序一:
package com.abin;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterDemo {
public static void main(String[] args){
//創建一個filewriter對象,該對象被初始化需要指定被操作的文件。
//初始化函數會按照參數的指定建立一個文件,如果參數所指定的文件已經存在則將被新文件覆蓋
FileWriterfileWriter = null;
try {
fileWriter= new FileWriter("e:\\abin.txt");
//調用write方法將內容寫入流
fileWriter.write("我是陳從賓");
fileWriter.write("my name is chen cong bin");
//刷新流,將數據寫進目的文件。
fileWriter.flush();
} catch (IOException e) {
System.err.println(e.toString());
}finally{
if (fileWriter != null) {
//關閉流,但在關閉之前先刷新流,將流中的數據寫進目的文件
//與flush區別是flush刷新後可以繼續使用而流不被關閉。close刷新後,會將流關閉
try {
fileWriter.close();
}catch (IOException e) {
System.err.println(e.toString());
}
}
}
}
}
示例程序二:
package com.abin;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderDemo {
public static void main(String[] args){
FileReaderfileReader = null;
char [] buf= new char[1024];
int num = 0;
try {
//建立一個讀入流,並與目的文件關聯,在此之前需要確定目的文件存在
fileReader= new FileReader("e:\\abin.txt");
}catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
//read(char[]buf)返回的是讀到的字節數目,讀到流的末尾返回-1
while ((num = fileReader.read(buf))!=-1) {
System.out.print(new String(buf, 0,num));
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if (fileReader!=null) {
try {
//關閉流
fileReader.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
利用構造函數FileWriter(String fileName, boolean append),當append爲true時可以實現續寫。
在此還需注意對IOException的處理,一般要將關閉流操作放在finally{}之中,有可能會出現FileNotFoundException(一般是因指定的操作文件或目的文件不存在造成的) ,NullPointException(一般是對象未能成功初始化造成的)。