概念摘自:http://jingyan.baidu.com/article/5552ef473ab5f2518ffbc98e.htmlhtml
Java的流式輸入輸出創建在4個抽象類的基礎上:InputStream,OutputStream,Reader和Writer。它們用來建立具體的流式子類。InputStream和OutputStream類被設計爲字節類,而Reader和Writer被設計爲字符流類。數組
通常,處理字符和字符串用字符流類,字節和二進制文件用字節類。本篇只講字節流類;測試
字節流中的兩個頂層類爲:InputStream(輸入字節流)和OutputStream(輸出字節流). 其下有兩個子類FileInputStream(文件輸入流)和FileOutputStream(文件輸出流)。spa
FileInputStream讀取的兩種方法:逐字節讀;以字節數組讀取兩種方式;設計
public static void main(String[] args) { //建立文件對象,指定要讀取的文件路徑(要讀的文件必定要存在) File file=new File("E:\\a.text"); try { //建立文件輸入流對象.指定要讀取的文件對象 FileInputStream fin=new FileInputStream(file); /***********方法一(將輸入流的數據傳遞給字節數組)*********/ //建立字節數組,準備將文件流中的數據傳給字節數組 /*byte[] b=new byte[fin.available()]; //將字節流中的數據傳遞給字節數組 fin.read(b); //將字節數組轉爲字符串 String s=new String(b); System.out.println(s);*/ /*********************************************/ /********方法二(逐字節讀取數據從字節輸入流)***********/ int l; while ((l=fin.read())!=-1) { System.out.println((char)l); //測試read()方法的含義,什麼是逐字節讀,及int類型的l表明什麼意思,測試結果l表明存儲的內容的int的表現形式,與進制相關,不作深究 //System.out.println((char)l+"\t"+l); } fin.close(); /************************************************/ } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
FileOutputStream寫入文件的兩種方式:以字節數組寫入;逐字節寫入;code
public static void main(String[] args) { // TODO Auto-generated method stub //建立文件對象,指定要寫出的文件路徑 File file=new File("d:\\d.text"); try { //建立文件字節輸出流對象,準備向d.txt文件中寫出數據,true表示在原有的基礎上增長內容 FileOutputStream fout=new FileOutputStream(file,true); Scanner sc=new Scanner(System.in); System.out.println("請寫出一段字符串:"); String msg=sc.next()+"\r\n";; /******************(方法一)按字節數組寫入**********************/ //byte[] bytes = msg.getBytes();//msg.getBytes()將字符串轉爲字節數組 //fout.write(bytes);//使用字節數組輸出到文件 /******************(方法一)逐字節寫入**********************/ byte[] bytes = msg.getBytes(); for (int i = 0; i < bytes.length; i++) { fout.write(bytes[i]);//逐字節寫文件 } fout.flush();//強制刷新輸出流 fout.close();//關閉輸出流 System.out.println("寫入完成!"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
字節流轉化爲字符流xml
//建立字節輸出流對象 FileOutputStream fout=new FileOutputStream(new File("student.xml")); //建立字節流緩衝區,加快寫出速度 BufferedOutputStream bout=new BufferedOutputStream(fout); //建立字符輸出流對象 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(bout, "utf-8")); doc.write(bw); bw.flush(); bw.close();
爲何將字節流轉化爲字符流?htm
由於字節流是二進制讀寫的,在外部打開是亂碼,轉化爲字符串或字符能夠讓文件在外部也能夠看到內容!根據具體的需求肯定用哪一個!對象