JAVA 中定義了兩種輸入輸出流:字符流、字節(jié)流。字節(jié)流由兩個頂層的操象類, InputStream 、 OutputStream 類構成,每個操象類,都有其具體子類。下表是一些常用的字節(jié)流類。
BufferedInputStream |
緩沖輸入流 |
BufferedOutputStream |
緩沖輸出流 |
ByteArrayInputStream |
從字節(jié)數(shù)組讀取的輸入流 |
ByteArrayOutputStream |
從字節(jié)數(shù)組寫入的輸出流 |
DataInputStream |
包含讀取 JAVA 標準數(shù)據(jù)類型方法的輸入流 |
DataOutputStream |
包含輸入 JAVA 標準數(shù)據(jù)類型方法的輸出流 |
FileInputStream |
讀取文件的輸入流 |
FileOutputStream |
寫文件的輸出流 |
FilterInputStream |
實現(xiàn) InputStream |
FilterOutputStream |
實現(xiàn) OutputStream |
InputStream |
描述輸入流的操象類 |
OutputStream |
描述輸出流的操象類 |
PipedInputStream |
輸入管道 |
PipedOutputStream |
輸出管道 |
PrintStream |
包含 print() 和 println() 的輸出流 |
PushbackInputStream |
支持向輸入流返回一個字節(jié)的單字節(jié)的 ”unget” 的輸入流 |
RandomAccessFile |
支持隨機文件的輸入輸出 |
SequenceInputStream |
兩上或兩個以上順序讀取的輸入流 |
|
|
字符類由兩個類層次結構定義,頂層有兩個操象類, Reader 和 Writer 。這些類處理統(tǒng)一編碼的字符流,包含如下具體子類
BufferedReader |
緩沖輸入字符流 |
BufferedWriter |
緩沖輸出字符流 |
CharArrayReader |
從字符數(shù)組中讀取數(shù)據(jù)的輸入流 |
CharArrayWriter |
向字符數(shù)組寫數(shù)據(jù)的輸出流 |
FileReader |
讀取文件的輸入流 |
FileWriter |
寫文件的輸出流 |
FilterReader |
過慮讀 |
FilterWriter |
過慮寫 |
InputStreamReader |
把字節(jié)轉(zhuǎn)換成字符的輸入流 |
OutputStreamWriter |
把字符轉(zhuǎn)換成字節(jié)的輸出流 |
LineNumberReader |
計數(shù)行數(shù)的輸入流 |
PipedReader |
輸入管道 |
PipedWriter |
輸出管道 |
PushbackReader |
允許字符返回到輸入流的輸入類 |
Reader |
描述字符輸入流的操象類 |
StringReader |
讀取字符串的輸入流 |
StringWriter |
寫字符串的輸出流 |
Writer |
描述字符流輸出的操象類 |
預定義流
所有的
JAVA
程序會自動導入
java.lang.*
包。該包定義了一個
System
的類,該類封裝了運行時環(huán)境的多方面,能獲得與當前系統(tǒng)有關的不同屬性。其中包括三個自定義的流變量
,in,out
和
err
。
System.out
是標準的輸出流,
System.in
是標準的輸入流。
System.err
是標準的錯誤流,默認是控制臺。顯然這些流可以重定向任何兼容的輸入、輸出設備。
讀取控制臺的輸入
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
package com.jdk.io;
import java.io.*;
public class Demo1 {
?????? public static void main(String[] args) throws Exception{
????????????? char c;
????????????? BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
????????????? System.out.println(" 輸入 Q 或 q 退出 ");
????????????? do{
???????????????????? c=(char)br.read();
???????????????????? System.out.println(c);
????????????? }while(c!='q');
?????? }
}
這是一個簡單的例子,演示了從控制中輸入字符的例子,還有 read() 方法的使用。 下面的例子演示了 BufferedReader 類的 readline() 方法使用
package com.jdk.io;
import java.io.*;
public class Demo1 {
?????? public static void main(String[] args) throws Exception{
????????????? String c;
????????????? BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
????????????? System.out.println(" 輸入 Q 或 q 退出 ");
????????????? do{
???????????????????? c=br.readLine();
???????????????????? System.out.println(c);
????????????? }while(!"stop".equals(c));
?????? }
}
向控制臺輸出
向控制臺輸出通常由 system.out.println() 來完成,它是由 printStream ( System.out 引用的對象類型)來定義的。心管 System.out 是一個字節(jié)流的輸出,用它來作簡單程序的輸出是可行的, PrintStream 是從 OutputStream 派生出來的,它實了 writer 方法,用來向控制臺輸出一個字符 (char) 。一般不常用 writer ()向控制臺輸出,而用 print() 或 println() 。
PrintWriter
類
Printwriter 流是基于字符串的,它支持 Object 的 print 和 println ,對于不同的類型,它會自動調(diào)用 toString() 轉(zhuǎn)換成字符串來輸出。如:
package com.jdk.io;
import java.io.*;
public class Demo2 {
?????? /**
?????? ?* @param args
?????? ?*/
?????? public static void main(String[] args) {
????????????? PrintWriter pw=new PrintWriter(System.out,true);
????????????? pw.println("this a String");
????????????? pw.println(new Integer("333"));
?????? }
}
文件的讀寫
java 允許字符形式的使用字節(jié)文件流。兩個最常用的類就是 FileInputSteam 、 FileOutputStream 這兩個類,為打開文件,你只需要創(chuàng)建兩個類中其中一個的對象即可。下面是一個例子:
package com.jdk.io;
import java.io.*;
public class ShowFile {
?????? public static void main(String[] args) throws Exception{
????????????? int i;
????????????? FileInputStream fis=null;
????????????? try{
???????????????????? fis=new FileInputStream(args[0]);
????????????? }catch(Exception e){
???????????????????? e.printStackTrace();
????????????? }
????????????? do{
???????????????????? i=fis.read();
???????????????????? if(i!=-1){System.out.println((char)i);}
????????????? }while(i!=-1);
?????? }
}
FileInputStream 實現(xiàn)從文件輸入內(nèi)容。