BufferedReader與RandomAccessFile

十月 7, 2009 at 1:20 上午 | In Uncategorized | 2 Comments

BufferedReader大家常用, readLine更是常會用到的method, 但是當遇到需要重新回到起始點讀取的時候, 會遇到很多限制, 以搭配mark/reset的方式, 在遇到readLine整行讀取的時候, 會出現out of range而產生exception的情況發生, 並不適宜, 簡單來說, BufferedReader是設計來往前讀取的, 不適合回頭往前讀, 附上BufferedReader的範例如下。


String s = "test\ntest2\ntest3";
char buf[] = new char[s.length()];
s.getChars(0, s.length(), buf, 0);

CharArrayReader in = new CharArrayReader(buf);
BufferedReader f = new BufferedReader(in);

String tempStr = f.readLine();
while ( tempStr != null){
System.out.println("readLine1: " + tempStr);
tempStr = f.readLine();
}

RandomAccessFile就沒有這個限制了, 隨時都可以跳到所要的位置, 尤其在配合readLine的時候更顯得好用, 範例如下:


String fileName = "c:/INSTALL.LOG";
File file = new File(fileName);
RandomAccessFile raf = new RandomAccessFile(file, "rw");

String tempRAFStr = raf.readLine();
while ( tempRAFStr != null){
System.out.println("tempRAFStr: " + tempRAFStr);
tempRAFStr = raf.readLine();
}

raf.seek(0); //重置讀取位置
tempRAFStr = raf.readLine();

while ( tempRAFStr != null){
System.out.println("tempRAFStr: " + tempRAFStr);
tempRAFStr = raf.readLine();
}

在WordPress.com寫網誌. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.