1.操作基本數據類型的數據流
數據輸入流:DataInputStream
DataInputStream(InputStream in)
數據輸出流:DataOutputStream
DataOutputStream(OutputStream out)
用法和字節流基本一樣,只是該流用來讀寫基本數據類型的數據。
/*
* 輸出流
*/
//封裝資源創建對象
DataOutputStream dos = new DataOutputStream(new FileOutputStream("dos.txt")) ;
//寫出數據
dos.writeByte(100);
dos.writeShort(99);
dos.writeInt(98);
dos.writeLong(97);
dos.writeFloat(96.96F);
dos.writeDouble(95.9595);
dos.writeChar('C');
dos.writeBoolean(false);
//釋放資源
dos.close();
/*
* 輸入流
*/
//封裝資源創建對象
DataInputStream dis = new DataInputStream(new FileInputStream("dos.txt")) ;
//讀取數據,必須按照順序讀
byte b = dis.readByte() ; //100
short s = dis.readShort() ;//99
int i = dis.readInt() ;//98
long l = dis.readLong() ;//97
float f = dis.readFloat() ;//96.96
double d = dis.readDouble() ;//95.9595
char c = dis.readChar() ;//C
boolean bb = dis.readBoolean() ;//false
//釋放資源
dis.close();
System.out.println(b+"\n"+s+"\n"+i+"\n"+l+"\n"+f+"\n"+d+"\n"+c+"\n"+bb);
2.內存操作流 :用於處理臨時存儲信息的,程序結束,數據就從內存中消失(因此內存流的close()方法是無意義的)
字節數組:
ByteArrayInputStream:
ByteArrayOutputStream:
字符數組:
CharArrayReader:
CharArrayWriter:
字符串:
StringReader:
StringWriter:
/*
* 字節數組,(字符數組和字符串用法類似)
*/
//寫入數據
ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
for (int i = 0; i < 10 ; i++) {
bos.write(("hello"+i).getBytes());
}
//因爲是存在內存中,所以無法查看
//查看源碼可以知道,close()沒有執行任何操作,是無意義的,因此可以不需要
//bos.close();
byte[] by = bos.toByteArray() ;
//讀取數據
ByteArrayInputStream bis = new ByteArrayInputStream(by) ;
int b = 0 ;
while((b = bis.read()) != -1){
System.out.print((char)b);
}
//bis.close();
3.打印流
字節打印流:PrintStream
字符打印流:PrintWrite
打印流的特點:
A:只有些數據的流,沒有讀取數據的,只能操作目的地址,不能操作數據源
B:可以操作任意類型的數據
使用其特殊的方法
print()
println()
C:如果啓動了自動刷新,能夠自動更新。
PrintWriter pw = new PrintWriter(new FileWriter(“pw.txt”),true) ;
但是必須要調用println()方法,這樣不僅能實現自動刷新,還能實現換行。
即println()一句等價於以下三句:
bw.write() ;
bw.nextLine() ;
bw.flush() ;
D:該流是可以直接操作文本文件的。
哪些對象是可以直接操作文本文件的呢?
FileOutputStream
FileInputStream
FileReader
FileWriter
PrintWriter
PrintStream
注意:看API,如果構造方法裏同時有File類型的和String類型的參數,一般來說可以直接操作文件
根據是否可以直接操作文件,可以把流分爲:
基本流:可以直接讀寫文件
高級流:在基本流的基礎上提供了一些其他功能
4.標準輸入輸出流
System類中的兩個成員變量:
public static final InputStream in : ”標準“輸入流
public static final PrintStream out :“標準”輸出流
由上可知,
InputStream is = System.in ;
PrintStream ps = System.out ;
System.in的本質其實就是InputStream is
System.out的本質其實就是PrintStream ps
所以我們可以知道
System.out.println() = ps.println()
而System.out.print不存在的原因是因爲 ps.print()不存在
三種鍵盤錄入方式:
A:main()方法的args接收參數
B:Scanner(JDK5以後)
Scanner input= new Scanner(System.in) ;
String s = input.nextLine() ;
int x = input.nextInt() ;
..
C:通過字符緩衝流包裝標準輸入流實現
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;
5.隨機訪問流