Java筆記:I/O
一、流
Java通過流實現I/O,流是一種可以產生或使用信息的抽象。
Java定義了兩種類型的流:
- 字節流:處理字節的輸入和輸出,例如讀寫二進制數據。
- 字符流:處理字符的輸入和輸出。
在底層所有I/O仍然是面向字節的,字符流知識為處理字符提供更高效的方法。
二、字節流類
BufferedInputStream BufferedOutputStream |
緩沖的輸入流 緩沖的輸出流 |
ByteArrayInputStream ByteArrayOutputStream |
讀取字節數組的輸入流 寫入字節數組的輸出流 |
DataInputStream DataOutputStream |
讀取標準數據類型的方法的輸入流 寫入標準數據類型的方法的輸出流 |
FileInputStream FileInputStream |
讀取文件的輸入流 寫入文件的輸出流 |
InputStream OutputStream |
描述流輸入的抽象類 描述流輸出的抽象類 |
FilterInputStream FilterOutputStream |
實現InputStream 實現OutputStream |
ObjectInputStream ObjectOutputStream |
對象的輸入流 對象的輸出流 |
PipedInputStream PipedOutputStream |
輸入管道 輸出管道 |
PrintStream |
包含print和println的輸出流 |
PushbackInputStream |
允許字節返回的輸入流 |
SequenceInputStream |
由多個依次讀取的輸入流組合而成的輸入流 |
三、字符流類
BufferedReader BufferedWriter |
緩沖的輸入字符流 緩沖的輸出字符流 |
CharArrayReader CharArrayWriter |
從字符數組讀取內容的輸入流 向字符數組寫入內容的輸出流 |
FileReader FileWriter |
讀取文件的輸入流 寫入文件的輸出流 |
FilterReader FilterWriter |
過濾的讀取器 過濾的寫入器 |
InputStreamReader OutputStreamWriter |
將字節轉換為字符的輸入流 將字符轉換為字節的輸出流 |
StringReader StringWriter |
從字符串讀取內容的輸入流 向字符串寫入內容的輸出流 |
PipedReader PipedWriter |
輸入管道 輸出管道 |
Reader Writer |
描述字符流輸入的抽象類 描述字符流輸出的抽象類 |
PrintWriter |
包含print和println的輸出流 |
PushbackReader |
允許字符返回的輸入流 |
LineNumberReader |
支持行操作的輸入流 |
四、預定義流
System包含的預定義流
- System.out:標準輸出流,PrintStream類型對象。
- System.err:標準錯誤流,PrintStream類型對象。
- System.in:標準輸入流,InputStream類型對象。
五、控制臺
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; class Solution { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); char c = (char) reader.read();//獲取字符 System.out.write(c); String str = reader.readLine();//讀取字符串 PrintWriter writer = new PrintWriter(System.out, true); writer.println(str); } }View Code
六、讀寫文件
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; class Solution { static String read(String fileName) { FileInputStream fin = null; StringBuilder builder = new StringBuilder(); try { fin = new FileInputStream(fileName); int i; do { i = fin.read();//讀取字節 if (i != -1)//-1表示到達文件結尾 builder.append((char) i); } while (i != -1); } catch (FileNotFoundException exc) { System.out.println("Cannot open file"); } catch (IOException exc) { System.out.println("Cannot read file"); } finally { try { if (fin != null) fin.close(); } catch (IOException exc) { System.out.println("Cannot close file"); } } return builder.toString(); } static void write(String fileName, String content) { FileOutputStream fout = null; try { fout = new FileOutputStream(fileName); for (int i = 0; i < content.length(); i++) fout.write((int) content.charAt(i));//寫入字節 } catch (FileNotFoundException exc) { System.out.println("Cannot open file"); } catch (IOException exc) { System.out.println("Cannot write file"); } finally { try { if (fout != null) fout.close(); } catch (IOException exc) { System.out.println("Cannot close file"); } } } }View Code
自動關閉文件,離開代碼塊後會隱式調用close方法關閉流關聯的對象。
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; class Solution { public static void main(String[] args) { try (FileInputStream fin = new FileInputStream("file.txt")) { int i; do { i = fin.read(); if (i != -1) System.out.print((char) i); } while (i != -1); } catch (FileNotFoundException exc) { System.out.println("Cannot open file"); } catch (IOException exc) { System.out.println("Cannot read file"); } } }View Code
Java筆記:I/O