IO流的學習

2021-06-29 02:57:11 字數 3215 閱讀 2461

所謂流,是指一組有順序的位元組集合,是對資料傳輸的抽象,而又根據各種傳輸的需求,將流定義為各種類。各種流的一般都含有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檔案。此時的**如下:

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();

}

在這個方法中,傳入兩個資料,f為指定目錄,f2為某乙個檔案類物件。從目錄f下讀取的所有檔名寫入到f2檔案中。同時,這裡使用了遞迴呼叫的技巧。同時,這裡用到了inputstream中的換行的技巧,使用了乙個newline位元組陣列,這個newline的內容如下:

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方法去關閉 資料流可...