IO(Input Output)流
IO流用來處理設備之間的數據傳輸
Java對數據的操作是通過流的方式
Java用於操作流的對象都在IO包中
流按操作數據分爲兩種:字節流與字符流。
流按流向分爲:輸入流,輸出流。
IO流常用基類
字節流的抽象基類:
InputStream ,OutputStream。
字符流的抽象基類:
Reader , Writer。
注:由這四個類派生出來的子類名稱都是以其父類名作爲子類名的後綴。
(InputStream的子類FileInputStream。)
(Reader的子類FileReader。)
IO程序的書寫
導入IO包中的類
進行IO異常處理
在finally中對流進行關閉
字符流——創建文件
創建流對象,建立數據存放文件
FileWriter fw = new FileWriter(“Test.txt”);
調用流對象的寫入方法,將數據寫入流
fw.write(“text”);
關閉流資源,並將流中的數據清空到文件中。
fw.close();
完整代碼
FileWriter fw = null;
try{
fw= new FileWriter("Test.txt");
fw.write("text");
}
catch(IOException e){
System.out.println(e.toString());
}
finally{
If(fw!=null)
try{
fw.close();
}
catch(IOException e){
System.out.println(e.toString());
}
}
字符流——讀取文件
建立一個流對象,將已存在的一個文件加載進流。
FileReader fr = new FileReader(“Test.txt”);
創建一個臨時存放數據的數組。
char[] ch = new char[1024];
調用流對象的讀取方法將流中的數據讀入到數組中。
fr.read(ch);
完整代碼
FileReader fr = null;
try{
fr= new FileReader("c:\\test.txt");
char[]buf = new char[1024];
intlen= 0;
while((len=fr.read(buf))!=-1){
System.out.println(newString(buf,0,len));
}
}
catch(IOException e){
System.out.println("read-Exception:"+e.toString());
}
finally{
if(fr!=null){
try{
fr.close();
}
catch(IOException e){
System.out.println("close-Exception:"+e.toString());
}
}
}
字符流的緩衝區
緩衝區的出現提高了對數據的讀寫效率。
對應類
BufferedWriter
BufferedReader
緩衝區要結合流纔可以使用。
在流的基礎上對流的功能進行了增強。
裝飾設計模式
對原有類進行了功能的改變,增強。
裝飾模式的基本格式。
它與繼承有什麼不同?
瞭解BufferedReader的原理。
字節流
基本操作與字符流類相同
但它不僅可以操作字符,還可以操作其他媒體文件
轉換流
InputStreamReader,OutputStreamWriter
轉換流的由來
字符流與字節流之間的橋樑
方便了字符流與字節流之間的操作
轉換流的應用
字節流中的數據都是字符時,轉成字符流操作更高效。
標準輸入輸出流
System類中的字段:in,out。
它們各代表了系統標準的輸入和輸出設備。
默認輸入設備是鍵盤,輸出設備是顯示器。
System.in的類型是InputStream.
System.out的類型是PrintStream是OutputStream的子類FilterOutputStream 的子類.
標準輸入輸出流示例
例:獲取鍵盤錄入數據,然後將數據流向顯示器,那麼顯示器就是目的地。
通過System類的setIn,setOut方法對默認設備進行改變。
System.setIn(new FileInputStream(“1.txt”));//將源改成文件1.txt。
System.setOut(new FileOutputStream(“2.txt”));//將目的改成文件2.txt
因爲是字節流處理的是文本數據,可以轉換成字符流,操作更方便。
BfferedReader bufr =
newBufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw =
newBufferedWriter(new OutputStreamWriter(System.out));
流的基本應用小節
流是用來處理數據的。
處理數據時,一定要先明確數據源,與數據目的地(數據匯)。
數據源可以是文件,可以是鍵盤。
數據目的地可以是文件、顯示器或者其他設備。
而流只是在幫助數據進行傳輸,並對傳輸的數據進行處理,比如過濾處理.轉換處理等。
File類
用來將文件或者文件夾封裝成對象
方便對文件與文件夾的屬性信息進行操作。
File對象可以作爲參數傳遞給流的構造函數。
瞭解File類中的常用方法。
遞歸
函數自己調用自己。
注意:遞歸時一定要明確結束條件。
應用場景:
當某一功能要重複使用時。
IO包中的其他類
RandomAccessFile
隨機訪問文件,自身具備讀寫的方法。
通過skipBytes(intx),seek(int x)來達到隨機訪問。
管道流
PipedInputStream和PipedOutputStream
輸入輸出可以直接進行連接,通過結合線程使用。
IO包中的其他類
打印流
PrintWriter與PrintStream
可以直接操作輸入流和文件。
序列流
SequenceInputStream
對多個流進行合併。
操作對象
ObjectInputStream與ObjectOutputStream
被操作的對象需要實現Serializable(標記接口);
操作基本數據類型
DataInputStream與DataOutputStream
操作字節數組
ByteArrayInputStream與ByteArrayOutputStream
操作字符數組
CharArrayReader與CharArrayWrite
操作字符串
StringReader 與 StringWriter
字符編碼
字符流的出現爲了方便操作字符。
更重要是的加入了編碼轉換。
通過子類轉換流來完成。
InputStreamReader
OutputStreamWriter
在兩個對象進行構造的時候可以加入字符集。
最近51CTO+IT十八掌免費大數據課程,有興趣和問題的小夥伴可以去觀看徐培成老師直播課或者視頻。