InputStream
此抽象類別是表示位元組輸入資料流的所有類的超類。需要定義 InputStream 的子類的應用程式必須始終提供返回下一個輸入位元組的方法。
int available()
返回此輸入資料流方法的下一個調用方可以不受阻塞地從此輸入資料流讀取(或跳過)的位元組數。
void close()
關閉此輸入資料流並釋放與該流關聯的所有系統資源。
void mark(int readlimit)
在此輸入資料流中標記當前的位置。
boolean markSupported()
測試此輸入資料流是否支援 mark 和 reset 方法。
abstract int read()
從輸入資料流讀取下一個資料位元組。
int read(byte[] b)
從輸入資料流中讀取一定數量的位元組並將其儲存在緩衝區數組 b 中。
int read(byte[] b, int off, int len)
將輸入資料流中最多 len 個資料位元組讀入位元組數組。
void reset()
將此流重新置放到對此輸入資料流最後調用 mark 方法時的位置。
long skip(long n)
跳過和放棄此輸入資料流中的 n 個資料位元組。
OutputStream
此抽象類別是表示輸出位元組流的所有類的超類。輸出資料流接受輸出位元組並將這些位元組發送到某個接收器。需要定義OutputStream 子類的應用程式必須始終提供至少一種可寫入一個輸出位元組的方法。
void close()
關閉此輸出資料流並釋放與此流有關的所有系統資源。
void flush()
重新整理此輸出資料流並強制寫出所有緩衝的輸出位元組。
void write(byte[] b)
將 b.length 個位元組從指定的位元組數組寫入此輸出資料流。
void write(byte[] b, int off, int len)
將指定位元組數組中從位移量 off 開始的 len 個位元組寫入此輸出資料流。
abstract void write(int b)
將指定的位元組寫入此輸出資料流。
進行I/O操作時可能會產生I/O例外,屬於非運行時例外,應該在程式中處理。如:FileNotFoundException, EOFException, IOException等等,下面具體說明操作JAVA位元組流的方法。
讀檔案:
本例以FileInputStream的read(buffer)方法,每次從來源程式檔案OpenFile.java中讀取512個位元組,儲存在緩衝區buffer中,再將以buffer中的值構造的字串new String(buffer)顯示在螢幕上。程式如下(本常式序放在包biz.1cn.stream裡面,另外請在根目錄下建立TestFile.txt檔案,以便正常運行):
package biz.1cn.stream;
import java.io.FileInputStream;
import java.io.IOException;
/**
* @author chenrz(simon)
* @date 2006-6-29
* <p>
* JAVA位元組流例子-讀檔案(www.1cn.biz)
* </p>
*/
public class ReadFile {
public static void main(String[] args) {
try {
// 建立檔案輸入資料流對象
FileInputStream is = new FileInputStream("TestFile.txt");
// 設定讀取的位元組數
int n = 512;
byte buffer[] = new byte[n];
// 讀取輸入資料流
while ((is.read(buffer, 0, n) != -1) && (n > 0)) {
System.out.print(new String(buffer));
}
System.out.println();
// 關閉輸入資料流
is.close();
} catch (IOException ioe) {
System.out.println(ioe);
} catch (Exception e) {
System.out.println(e);
}
}
}
寫檔案:
本例用System.in.read(buffer)從鍵盤輸入一行字元,儲存在緩衝區buffer中,再以FileOutStream的write(buffer)方法,將buffer中內容寫入檔案WriteFile.txt中,程式如下(本常式序放在包biz.1cn.stream裡面,另外運行後會在根目錄下建立WriteFile.txt檔案):
package biz.1cn.stream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author chenrz(simon)
* @date 2006-6-29
* <p>
* JAVA位元組流例子-寫檔案(www.1cn.biz)
* </p>
*/
public class WriteFile {
public static void main(String[] args) {
try {
System.out.print("輸入要儲存檔案的內容:");
int count, n = 512;
byte buffer[] = new byte[n];
// 讀取標準輸入資料流
count = System.in.read(buffer);
// 建立檔案輸出資料流對象
FileOutputStream os = new FileOutputStream("WriteFile.txt");
// 寫入輸出資料流
os.write(buffer, 0, count);
// 關閉輸出資料流
os.close();
System.out.println("已儲存到WriteFile.txt!");
} catch (IOException ioe) {
System.out.println(ioe);
} catch (Exception e) {
System.out.println(e);
}
}
}