JAVA
中定義了兩種輸入輸出流:字符流、字節(jié)流。字節(jié)流由兩個頂層的操象類,
InputStream
、
OutputStream
類構(gòu)成,每個操象類,都有其具體子類。下表是一些常用的字節(jié)流類。
?
BufferedInputStream
|
緩沖輸入流
|
BufferedOutputStream
|
緩沖輸出流
|
ByteArrayInputStream
|
從字節(jié)數(shù)組讀取的輸入流
|
ByteArrayOutputStream
|
從字節(jié)數(shù)組寫入的輸出流
|
DataInputStream
|
包含讀取
JAVA
標(biāo)準(zhǔn)數(shù)據(jù)類型方法的輸入流
|
DataOutputStream
|
包含輸入
JAVA
標(biāo)準(zhǔn)數(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
|
兩上或兩個以上順序讀取的輸入流
|
?
|
?
|
?
字符類由兩個類層次結(jié)構(gòu)定義,頂層有兩個操象類,
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
|
描述字符流輸出的操象類
|
?
預(yù)定義流
所有的
JAVA
程序會自動導(dǎo)入
java.lang.*
包。該包定義了一個
System
的類,該類封裝了運行時環(huán)境的多方面,能獲得與當(dāng)前系統(tǒng)有關(guān)的不同屬性。其中包括三個自定義的流變量
,in,out
和
err
。
System.out
是標(biāo)準(zhǔn)的輸出流,
System.in
是標(biāo)準(zhǔn)的輸入流。
System.err
是標(biāo)準(zhǔn)的錯誤流,默認(rèn)是控制臺。顯然這些流可以重定向任何兼容的輸入、輸出設(shè)備。
?
讀取控制臺的輸入
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)容。
?
?
?
posted on 2006-10-07 20:52
有貓相伴的日子 閱讀(4424)
評論(1) 編輯 收藏 所屬分類:
jdk