接著上篇http://m.survivalescaperooms.com/oumyye/p/4314412.html
java I/O流---內存操作流ByteArrayInputStream和ByteArrayOutputStreamByteArrayInputStream包含一個內部緩沖區,該緩沖區包含從流中讀取的字節,內部計數器跟著read方法要提供的下一個字節。FileInputStream是把文件當做數據源。ByteArrayInputStream則是把內存中的某一個數組單做數據源。ByteArrayOutputStream類實現了一個輸出流。其中的數據被寫入一個byte數組。緩沖區會隨著數據的不斷寫入而自動增長。可使用toByteArray()和toString()獲取數據源的。ByteArrayOutputStream將一個輸出流指向一個Byte數組,但這個Byte數組是ByteArrayOutputStream內部內置的,不需要定義。操作步驟

import java.io.* ;public class ByteArrayDemo01{ public static void main(String args[]){ String str = "HELLOWORLD" ; // 定義一個字符串,全部由大寫字母組成 ByteArrayInputStream bis = null ; // 內存輸入流 ByteArrayOutputStream bos = null ; // 內存輸出流 bis = new ByteArrayInputStream(str.getBytes()) ; // 向內存中輸出內容 bos = new ByteArrayOutputStream() ; // 準備從內存ByteArrayInputStream中讀取內容 int temp = 0 ; while((temp=bis.read())!=-1){ char c = (char) temp ; // 讀取的數字變為字符 bos.write(Character.toLowerCase(c)) ; // 將字符變為小寫 } // 所有的數據就全部都在ByteArrayOutputStream中 String newStr = bos.toString() ; // 取出內容 try{ bis.close() ; bos.close() ; }catch(IOException e){ e.PRintStackTrace() ; } System.out.println(newStr) ; }};Java I/O流---過濾流—緩沖流BufferedInputStream和BufferedOutputStream類BufferedInputStream和BufferedOutputStream繼承FilterInputStream和FilterOutputStream,實現了帶緩沖的過濾流,它提供了緩沖機制,把任意的I/O流“捆綁”到緩沖流上,可以提高該I/O流的讀取效率,在初始化時,除了要指定所連接的I/O流之外,還可以指定緩沖區的大小。在讀寫的同時對數據緩存,這樣避免每次讀寫數據都要進行實際的物理讀寫操作,在用BufferdOutputStream輸出時,數據先輸入緩沖區,當緩沖區滿的時再寫入連接的輸出流,可以調用flush()來清空緩沖區。這兩個流是處理流,通過內部緩存數組來提高操作流的效率
使用BufferedInputStream和BufferedOutputStream實現文件的復制void copyFile(String src , String dec){ FileInputStream fis=null; BufferedInuptStream bis=null; FileOutputStream fos=null; BufferedOutputStream bos=null; try { fis=new FileInputStream(src); fos=new FileOutputStream(dec); bis=new BufferedInputStream(fis); bos=new BufferedOutputStream(fos); while ((temp=bis.read())!=-1) { bos.write(temp); } } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); }finally { //增加處理流后,注意流的關閉順序!“后打開的先關閉” try { bos.close(); } catch (IOException e) { e.printStackTrace(); } try { bis.close(); } catch (IOException e) { e.printStackTrace(); } try { fos.close(); } catch (IOException e) { e.printStackTrace(); } try { fis.close(); } catch (IOException e) { e.printStackTrace(); } }}java I/O---數據操作流DataInputStream和DataOutputStream數據操作流通常在流中寫入或讀取一個結果是使用,如 網絡數據傳遞,DataInputStream和DataOutputStream提供了可以存取與機器無關的所有java基礎類型數據。
實例 數據寫入

import java.io.DataOutputStream ;import java.io.File ;import java.io.FileOutputStream ;public class DataOutputStreamDemo{ public static void main(String args[]) throws Exception{ // 所有異常拋出 DataOutputStream dos = null ; // 聲明數據輸出流對象 File f = new File("d:" + File.separator + "order.txt") ; // 文件的保存路徑 dos = new DataOutputStream(new FileOutputStream(f)) ; // 實例化數據輸出流對象 String names[] = {"襯衣","手套","圍巾"} ; // 商品名稱 float prices[] = {98.3f,30.3f,50.5f} ; // 商品價格 int nums[] = {3,2,1} ; // 商品數量 for(int i=0;i<names.length;i++){ // 循環輸出 dos.writeChars(names[i]) ; // 寫入字符串 dos.writeChar('/t') ; // 寫入分隔符 dos.writeFloat(prices[i]) ; // 寫入價格 dos.writeChar('/t') ; // 寫入分隔符 dos.writeInt(nums[i]) ; // 寫入數量 dos.writeChar('/n') ; // 換行 } dos.close() ; // 關閉輸出流 }};使用DataOutputStream寫入的數據使用DataInputStream讀取進來
import java.io.DataInputStream ;import java.io.File ;import java.io.FileInputStream ;public class DataInputStreamDemo{ public static void main(String args[]) throws Exception{ // 所有異常拋出 DataInputStream dis = null ; // 聲明數據輸入流對象 File f = new File("d:" + File.separator + "order.txt") ; // 文件的保存路徑 dis = new DataInputStream(new FileInputStream(f)) ; // 實例化數據輸入流對象 String name = null ; // 接收名稱 float price = 0.0f ; // 接收價格 int num = 0 ; // 接收數量 char temp[] = null ; // 接收商品名稱 int len = 0 ; // 保存讀取數據的個數 char c = 0 ; // '/u0000' try{ while(true){ temp = new char[200] ; // 開辟空間 len = 0 ; while((c=dis.readChar())!='/t'){ // 接收內容 temp[len] = c ; len ++ ; // 讀取長度加1 } name = new String(temp,0,len) ; // 將字符數組變為String price = dis.readFloat() ; // 讀取價格 dis.readChar() ; // 讀取/t num = dis.readInt() ; // 讀取int dis.readChar() ; // 讀取/n System.out.printf("名稱:%s;價格:%5.2f;數量:%d/n",name,price,num) ; } }catch(Exception e){} dis.close() ; }};java I/O ---打印流
在整個IO包中,打印流是輸出信息最方便的類,主要包含字節打印流(PrintStream)和字符打印流(PrintWriter).打印流提供了非常方便的打印功能,可以打印任何的數據類型。
打印輸入
import java.io.* ;public class PrintDemo02{ public static void main(String arg[]) throws Exception{ PrintStream ps = null ; // 聲明打印流對象 // 如果現在是使用FileOuputStream實例化,意味著所有的輸出是向文件之中 ps = new PrintStream(new FileOutputStream(new File("d:" + File.separator + "test.txt"))) ; String name = "偶my耶" ; // 定義字符串 int age = 20 ; // 定義整數 float score = 990.356f ; // 定義小數 char sex = 'M' ; // 定義字符 ps.printf("姓名:%s;年齡:%d;成績:%f;性別:%c",name,age,score,sex) ; ps.close() ; }};BufferReaderBufferReader是從緩沖區讀取內容,所有的輸入的字節數據都將放在緩沖區之中。
import java.io.* ;public class BufferedReaderDemo01{ public static void main(String args[]){ BufferedReader buf = null ; // 聲明對象 buf = new BufferedReader(new InputStreamReader(System.in)) ; // 將字節流變為字符流 String str = null ; // 接收輸入內容 System.out.print("請輸入內容:") ; try{ str = buf.readLine() ; // 讀取一行數據 }catch(IOException e){ e.printStackTrace() ; // 輸出信息 } System.out.println("輸入的內容為:" + str) ; }};新聞熱點
疑難解答