1、流的概念java
流(stream)的概念源於UNIX中管道(pipe)的概念。在UNIX中,管道是一條不間斷的字節流,用來實現程序或進程間的通訊,或讀寫外圍設備、外部文件等。
一個流,必有源端和目的端,它們能夠是計算機內存的某些區域,也能夠是磁盤文件,甚至能夠是Internet上的某個URL。
流的方向是重要的,根據流的方向,流可分爲兩類:輸入流和輸出流。用戶能夠從輸入流中讀取信息,但不能寫它。相反,對輸出流,只能往輸入流寫,而不能讀它。
實際上,流的源端和目的端可簡單地當作是字節的生產者和消費者,對輸入流,可沒必要關心它的源端是什麼,只要簡單地從流中讀數據,而對輸出流,也可不知道它的目的端,只是簡單地往流中寫數據。形象的比喻——水流 ,文件======程序 ,文件和程序之間鏈接一個管道,水流就在之間造成了,天然也就出現了方向:能夠流進,也能夠流出.便於理解,這麼定義流: 流就是一個管道里面有流水,這個管道鏈接了文件和程序。
java.io包中的stream類根據它們操做對象的類型是字符仍是字節可分爲兩大類: 字符流和字節流。
Java的字節流InputStream是全部字節輸入流的祖先,而OutputStream是全部字節輸出流的祖先。
Java的字符流Reader是全部讀取字符串輸入流的祖先,而writer是全部輸出字符串的祖先。結合開始所說的輸入/輸出流 ,出現了個一小框架。
JAVA字節流node
要注意的是,構造FileInputStream, 對應的文件必須存在而且是可讀的,而構造FileOutputStream時,如輸出文件已存在,則必須是可覆蓋的。網絡
1 import java.io.*; 2 public class Echo { 3 public static void main(String[] args) { 4 BufferedReader in = 5 new BufferedReader( 6 new InputStreamReader(System.in)); 7 String s; 8 try { 9 while((s = in.readLine()).length() != 0) 10 System.out.println(s); 11 // An empty line terminates the program 12 } catch(IOException e) { 13 e.printStackTrace(); 14 } 15 } 16 }
對BufferedReader類,該類的readLine()方法能一次從流中讀入一行,但對於BufferedWriter類,就沒有一次寫一行的方法,因此若要向流中一次寫一行,可用PrintWriter類將原來的流改形成新的打印流,PrintWriter類有一個方法println(),能一次輸出一行。如: 框架
............ PrintWriter out = new PrintWriter(new BufferedWriter( new FileWriter("D:\javacode\test.txt"))); out.println("Hello World!"); out.close(); ............
例子:dom
1,與控制檯相關。的讀入/寫出。 實現了字符串的複製。編碼
1 import java.io.*; 2 public class TextRead{ 3 4 public static void main(String[] args){ 5 BufferedReader bf = null;/*BufferedReader至關於一個大桶,其實就是內存,這裏實現了大量大量的讀寫 ,而不是讀一個字節或字符就直接寫如硬盤,增強了對硬盤的保護。*/ 6 try{ 7 while(true){ // while(true){}循環保證程序不會結束 8 9 bf = new BufferedReader(new InputStreamReader(System.in)); 10 /*System.in 爲標準輸入,System.out爲標準輸出*/ 11 /*InputStreamReader用語將字節流到字符流的轉化,這也就是處理流了 12 *在這裏至關與2個管道接在System.in與程序之間。 13 *readLine()方法功能比較好用,也就經過處理流來實現更好功能。 14 **/ 15 String line = bf.readLine(); 16 System.out.println(line); 17 } 18 }catch(Exception e){ 19 e.printStackTrace(); 20 }finally{ 21 //必定要關閉流,用完後。最好放在 22 23 filally 裏面。 24 try{ 25 if(bf!=null){ 26 bf.close(); 27 } 28 }catch(Exception e){ 29 e.printStackTrace(); 30 } 31 } 32 } 33 }
2,與文件 相關的 讀寫。 實現了文件的複製。spa
1 import java.io.*; 2 public class TextRead{ 3 4 public static void main(String[] args){ 5 File fin,fout; 6 BufferedReader bf = null; 7 PrintWriter pw = null; 8 try{ 9 fin = new File("zzc.txt"); //注意文件與程序都要在同一個文件夾下。zzc.txt爲要被複制的文件。 10 fout = new File("copyzzc.txt"); //若是沒有會自動建立。 11 bf = new BufferedReader(new FileReader(fin)); 12 pw = new PrintWriter(fout); //PrintWriter爲打印流,也可使用BufferedWriter. 13 String line = bf.readLine(); 14 while(line!=null){ 15 pw.println(line); 16 line = bf.readLine(); 17 } 18 }catch(Exception e){ 19 e.printStackTrace(); 20 }finally{ 21 try{ 22 //關閉 文件。 23 if(bf!=null){ 24 bf.close(); 25 bf = null; 26 } 27 if(pw!=null){ 28 pw.close(); 29 pw = null; 30 } 31 }catch(Exception e){ 32 e.printStackTrace(); 33 } 34 } 35 } 36 }
還有好多類:code
像RandomAccessFile類,序列化接口,都十分重要。對象
Java有一種特殊類型的IO數據流——DataOutputStream——它能夠保證「不管數據來自何種機器,只要使用一個DataInputStream收取這些數據,就可用本機正確的格式保存它們.blog