Java類中的IO分爲輸入和輸出兩部分。任何自Inputstream或Reader派生的類都含有read()方法,用於讀取單個字節或者字節數組,任何自Outputstream或Writer派生的類都含有write()方法,用於寫入單個字節或字節數組。但是這些方法通常不是給我們直接使用的,一般用於別的類,以便提供更有用的接口。JAVA IO之所以負責,就在於,通常我們要創建類對象不是單一的,而是疊合使用多個對象來提供所期待的功能。(使用裝設這模式,創建單一結果流,卻需要創建多個對象)。
首先要明確一點,就是類的設計者限定與輸入有關的所有類都應該從InputStream類繼承,與輸出有關的所有類都應該從OutputStream類繼承。
1.inputStream類型
類 | 功能 |
ByteArrayInputStream | 將內存的緩衝區當做InputStream使用 |
StringBufferInputStream | 將String轉換爲InputStream |
FileInputStream | 從文件中讀取信息 |
PipedInputStream | 產生用於寫入相關PipedOutputStream的數據 |
SequenceInputStream | 將兩個或者多個InputStream對象轉換爲單一InputStream |
FilterInputStream | 抽象類,作爲裝飾器的接口。用於爲其他Inputstream類提供有用的功能 |
2.outputStream類型
類 | 功能 |
ByteArrayOutputStream | 內存中創建緩衝區,所有送往流的數據都放在此 |
FileOutputStream | 將信息寫進文件 |
PipedOutputStream | 任何寫入其中的信息都會作爲PipedOutputStream的輸出 |
FilterOutputStream | 抽象類,裝飾器接口,用於爲其他的outputstream提供功能 |
Reader和Writer:面向字符流。在把來自字節層面的類轉換到字符層面的類的時候,要用到適配器類:InputStreamReader可以把InputStream轉換爲Reader,OutputStreamWriter可以把OutputStream轉換爲Writer。注意一點就是,儘量嘗試使用Reader和Writer,一旦成武代碼無法成功編譯的時候,再使用面向字節的類庫。
下面列出我平時針對指定要處理的對象,會使用到的流。
1.文件
//文件處理
String fileHandle(String filename){
BufferedReader bufferedReader = new BufferedReader(new
FileReader("resources/dirlist.txt"));
String str;
StringBuilder stringBuilder = new StringBuilder();
while((str=bufferedReader.readLine())!=null){
stringBuilder.append(str+"\n");
}
bufferedReader.close();
return stringBuilder.toString();
}