淺談JAVA位元組流(讀寫檔案)
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位元組流例子-讀檔案(
* </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位元組流例子-寫檔案(
* </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);
}
}
}