I/O編程強化

1.流及其意義
流的概念使得文件、網絡、內存等設備可以被統一處理

2.字節輸入輸出流
(1)字節輸入流基類InputStream
這裏寫圖片描述
常用讀取數據方法
int read():從輸入流中讀一個字節,形成一個0~255之間的整數返回(是一個抽象方法)
int read(byte b[]):讀多個字節到數組中,填滿整個數組
int read(byte b[], int off, int len):從輸入流中讀取長度爲len的數據,寫入數組b中從索引off開始的位置,並返回讀取得字節數
對於這三個方法,若返回-1,表明流結束

(2)字節輸出流基類OutputStream
這裏寫圖片描述
常用方法
write(int b):將一個整數輸出到流中(只輸出低位字節,爲抽象方法)
write(byte b[]):將字節數組中的數據輸出到流中
write(byte b[], int off, int len):將數組b中從off指定的位置開始,長度爲len的數據輸出到流中
flush():刷空輸出流,並將緩衝區中的數據強制送出
close():關閉流

3.File對象和文件輸入輸出流
File對象代表磁盤上的文件或目錄

File常見操作
File f=new File(“data\temp.dat”);
f.getName():返回文件名 temp.dat
f.getParent():返回文件所在目錄名 data
f.getPath():返回文件路徑 data\temp.dat
f.getAbsolutePath():返回絕對路徑 …\data\temp.dat
f.exists():文件是否存在
f.canWrite(), f.canRead():文件是否可寫、讀
f.isFile(), f.isDirectory():是否爲文件或目錄
f.lastModified(), f.length(), f.delete():文件的最後修改日期、長度;刪除文件
f.mkdir(), f.list():創建一個目錄;列出目錄下所有文件

FileInputStream:將磁盤上的文件變成輸入流

構造方法
FileInputStream(String fileName)
FileInputStream(File file)
例如:
InputStream in=new FileInputStream(“D:/1.txt”);

FileOutputStream:將磁盤上的文件變成輸出流

構造方法
FileOutStream(String fileName)
FileOutStream(String fileName,boolean append)
FileOutStream(File file)
FileOutStream(File file,boolean append)
例如:
OutputStream out=new FileOutputStream(“d:/3.txt”);
OutputStream out=new FileOutputStream(“d:/1.txt”,true);

SequenceInputStream:將兩個輸入流合併成一個輸入流
構造方法:SequenceInputStream(InputStream s1, InputStream s2);

RandomAccessFile
對於InputStream和OutputStream來說,它們的實例都是順序訪問流,即只能進行順序讀/寫
類RandomAccessFile則允許對文件內容同時完成讀和寫操作提供了支持隨機文件操作的方法:readXXX()或writeXXX():
如ReadInt(), ReadLine(), WriteChar(), WriteDouble()等。
int skipBytes(int n):將指針向下移動若干字節
length():返回文件長度
long getFilePointer():返回指針當前位置
void seek(long pos):將指針調到所需位置

4.常用過濾流
(1)裝飾者模式:過濾流(FilterInputStream和FilterOutputStream)
使用過濾流
FilterInputStream(InputStream in);
FilterOutputStream(OutputStream out);

(2)過濾流:緩衝流(BufferedInputStream和BufferedOutputStream)
將緩衝流與文件流相接
FileInputStream in = new FileInputStream(“file1.txt”);
FileOutputStream out = new FileOutputStream (“file2.txt”);
BufferedInputStream bin = new BufferedInputStream(in,256)
BufferedOutputStream bout = new BufferedOutputStream(out,256);
int len;
byte bArray[]=new byte[256];
len=bin.read(bArray); //len中得到是長度, bArray中得到的是數據
注意:對於BufferedOutputStream,只有緩衝區滿時,纔會將數據真正送到輸出流,但可以使用flush()方法人爲地將尚未填滿的緩衝區中的數據送出

(3)過濾流:數據流(DataInputStream和DataOutputStream)
數據流類DataInputStream和DataOutputStream的處理對象除了是字節或字節數組外,還可以實現對文件的不同數據類型的讀寫。
這裏寫圖片描述

(4)PrintStream
(5)標準輸入輸出流
(6)字節流:對象流(能夠輸入輸出對象的流稱爲對象流)ObjectOutputStream和ObjectInputStream
Student stu = new Student(981036, “Li Ming”, 16, “CSD”);
FileOutputStream fo = new FileOutputStream(“data.ser”);
ObjectOutputStream so = new ObjectOutputStream(fo);
so.writeObject(stu);
so.close();

5.對象持久化

6.管道流(PipedInputStream和PipedOutputStream)

7.字符輸入輸出流

(1)字符輸入流結構:(字符輸入流基類Reader)
這裏寫圖片描述
常用操作
read(): 讀入一個字符
read(char[]): 讀入多個字符
close(): 關閉此輸入流

(2)字符輸出流結構:(字符輸出流基類Writer)
這裏寫圖片描述
常用操作
write(int): 向輸出流寫一個字符
write(char[]):向輸出流寫多個字符
write(String): 向輸出流寫入一個字符串
flush(): 清空緩存
close(): 關閉此輸出流

8.字節流向字符流的轉換
(1)InputStreamReader和OutputStreamWriter是java.io包中用於處理字符流的最基本的類,用來在字節流和字符流之間作爲中介
InputStreamReader(InputStream in); //缺省規範
InputStreamReader(InputStream in, String enc); //指定規範enc
OutputStreamWriter(OutputStream out); //缺省規範
OutputStreamWriter(OutputStream out, String enc); //指定enc
實際使用中,應儘量使用BufferedWriter類包裝OutputStreamWriter,用BufferedReader類包裝InputStreamReader以提高性能

(2)BufferedReader和BufferedWriter
(3)其他字符流
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章