Java I/O操作的步驟
1、使用File類打開一個文件。
2、通過字節流或字符流的子類指定輸出位置。
3、進行讀/寫操作。
4、關閉輸入/輸出。
字節流
InputStream、OutputStream,子類如上圖所示。
InputStream沒有readLine()方法,不能讀取一行。
使用字節流時,不調用close()方法也可以輸出。
public class Demo {
public static void main(String[] args) throws IOException {
//字節流輸出到文件
File file = new File("D:/workspace/text.txt");
OutputStream out = new FileOutputStream(file);
String str = "Hello World!";
byte[] b = str.getBytes();
out.write(b);
}
}
字符流
Reader、Writer,子類如上圖所示。
BufferedReader有readLine()方法,可以讀取一整行。
使用字符流時,要調用close()方法完成輸出,如果不使用close()方法,可以用flush()方法清除緩衝區,也可以完成輸出。
public class Main {
public static void main(String[] args) throws IOException {
// 字符流輸出到文件
File file = new File("D:/workspace/text.txt");
Writer out = new FileWriter(file);
String str = "hello java";
out.write(str);
out.close();
// out.flush(); // 強制清空緩衝區,這樣就可以在沒有close的情況下輸出到文件
}
}
字節流轉字符流--InputStreamReader
字符流轉字節流--OutputStreamWriter
public class Demo {
public static void main(String[] args) throws IOException {
// 讀取文件
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:/workspace/text.txt")));
// 輸出到另一個文件
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:/workspace/ceshi.txt")));
String str = null;
while((str = br.readLine()) != null) {
bw.write(str); // 輸出
bw.newLine(); // 換行
bw.flush(); // 清空緩衝區,才能輸出
}
br.close();
}
}
說明
1、比較常用的形式如下一行:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:/workspace/text.txt")));
上面這一行相當於下面這幾行:
File file = new File("D:/workspace/text.txt"); // 打開一個文件
FileInputStream fis = new FileInputStream(file); // 讀取字節流
InputStreamReader isr = new InputStreamReader(fis); // 字節流轉換成字符流
BufferedReader br = new BufferedReader(isr); // 字符流轉換成字符緩衝輸入流
2、將字符流轉換成字符緩衝輸入流,是因爲在緩衝區裏面讀取數據比較快,提高效率。
3、從鍵盤讀入,一般輸出:
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = null;
while((str = br.readLine()) != null) {
bw.write(str);
bw.newLine();
bw.flush();
}
br.close();
}
}