所謂流,是指一組有順序的位元組集合,是對資料傳輸的抽象,而又根據各種傳輸的需求,將流定義為各種類。各種流的一般都含有file檔案的形參。要理解,流是從檔案物件抽象而來的。
根據流向的不同,可以分為輸入流和輸出流。根據處理資料的不同,可以分為字元流和位元組流。
一般含有stream的是位元組流,含有reader、writer的是字元流。注意結合類的定義字元去理解它的含義。
首先來總結一下各種流:
物件序列化和反序列化:objectinputstream、objectoutputstream、sierializable、transient
帶快取的位元組流:bufferedinputstream、bufferedoutputstream
帶快取的字元流:bufferedreader、bufferedwriter
多執行緒通訊流:pipeinputstream、pipeoutputstream
下面結合**來講述各種流的使用。
檔案的建立、刪除等操作
首先,關於file類,通常用file類物件來指向某個檔案。有兩個file常量,分別是:file.separator代表「/」,以及file.pathseparator代表「;」。這兩個常量在指定檔案的路徑的時候十分有用,比如說:
如果檔案不存在,這裡可以呼叫函式來建立檔案:string filename ="d:"+file.separator+"abd.txt";
file f = new file(filename);
f.createnewfile();
同樣也可以判斷檔案是否存在、刪除檔案等操作,比如說:
if(f.exists())
獲取指定目錄下的所有檔案
獲取指定資料夾的所有檔名的操作可以使用list(),它返回的是string陣列。不過這個方法返回的只是檔名,如果想要獲取完成的路徑,可以使用listfile()方法,此時返回的是file檔案。此時的**如下:
在這個方法中,傳入兩個資料,f為指定目錄,f2為某乙個檔案類物件。從目錄f下讀取的所有檔名寫入到f2檔案中。同時,這裡使用了遞迴呼叫的技巧。同時,這裡用到了inputstream中的換行的技巧,使用了乙個newline位元組陣列,這個newline的內容如下:string drc ="d:"+file.separator;
file f3 = new file(drc);
string str = f3.list();
file str2 = f3.listfiles();
for(int i=0;i
搜尋指定目錄下的所有檔案,並把檔名寫入另乙個檔案
public static void print(file f,file f2) throws ioexception
} }
else
} www.close();
}
byte newline = system.getproperty("line.separator").getbytes();
randomaccessfile的使用
randomaccessfile可以從任意的位置寫入或者是讀取流的內容。不多講,看乙個例子:
randomaccessfile demo = new randomaccessfile(f,"rw");
string random = "randomaccessfile";
demo.write(random.getbytes());
demo.write(newline);
demo.writechars(random);
demo.write(newline);
fileinputstream和fileoutputstream的使用
這兩個流是最常用的位元組流,幾乎所有的檔案都可以使用這兩個流,用乙個例子來說明這兩個流的使用:
注意所有的流,當使用完畢時一定要關閉,關閉的規則是:後開啟的先關閉。fileoutputstream fileoutput = new fileoutputstream(f,true);//true表示在檔案尾追加,不加的話表示從檔案首位開始寫入
string mark1 = "路徑分隔符:";
fileoutput.write(mark1.getbytes());
fileoutput.write(file.separator.getbytes());// file類中的常量"/"
fileoutput.write(newline);
fileoutput.write("this is a test file".getbytes());
fileoutput.close();
byte temp = new byte[1024];//定義乙個快取陣列
inputstream in =new fileinputstream(f);
in.read(temp);
system.out.println(temp.tostring());//使用fileinputstream讀檔案的一種方式
int flag=0;//這是乙個從檔案頭讀到檔案尾,並列印字元的經典**段。read()方法讀到檔案尾的返回值為-1
while((-1) != (flag=in.read()))
in.close();
//檔案複製
if(!f.exists())
inputstream input = new fileinputstream(f);
outputstream output = new fileoutputstream(f4);
if((input!=null)&&(output!=null))
}input.close();
output.close();
在檔案複製的**中,其規則就是從乙個檔案中讀取,然後寫入到另外乙個檔案中。
IO流學習 二
io流學習 二 public classbufferedwriterextends writer 將文字寫入字元輸出流,緩衝各個字元,從而提供單個字元 陣列和字串的高效寫入。可以指定緩衝區的大小,或者接受預設的大小。在大多數情況下,預設值就足夠大了。該類提供了 newline 方法,它使用平台自己的...
IO流學習小結
一 概念 io流是對資料傳輸抽象的總稱,根據資料的特性分為幾種類,方便對資料進行針對性的操作。二 分類 1 根據資料型別 即資料傳輸單位 的區別分為 字元流和位元組流 字元流和位元組流 只要是處理純文字資料,就優先考慮使用字元流 除此之外都使用位元組流 能處理大部分型別的資料 2 根據資料流向的區別...
IO流學習筆記
使用緩衝流時,不需要自定義位元組或字元陣列,緩衝流自帶有緩衝區。緩衝流是包裝流,關閉流時,只需要關閉外層的流,內部的流會自動關閉。通過轉換流可以將位元組流轉換為字元流 標準的輸出流,預設輸出到控制台,但是可以設定標準輸出流的輸出方向 呼叫setout方法 不需要手動呼叫close方法去關閉 資料流可...