java IO位元組流讀寫檔案

2021-08-18 16:11:58 字數 3796 閱讀 8856

如果是按照資料的流向劃分:

輸入流

輸出流

以當前程式做參照物,觀察資料是流入還是流出,如果流出,則使用輸出流,如果資料是流入,則使用輸入流。

如果按照處理的單位劃分:

位元組流: 位元組流讀取得都是檔案中二進位制資料,讀取到二進位制資料不會經過任何的處理。

字元流: 字元流讀取的資料是以字元為單位的 。 字元流也是讀取檔案中的二進位制資料,不過會把這些二進位制資料轉換成我們能 識別的字元。

字元流 = 位元組流 + 解碼

輸入位元組流:

——–| inputstream 所有輸入位元組流的基類 抽象類

————| fileinputstream 讀取檔案資料的輸入位元組流

使用fileinputstream讀取檔案資料的步驟:

1. 找到目標檔案

2. 建立資料的輸入通道。

3. 讀取檔案中的資料。

4. 關閉 資源.

//方式4:使用緩衝陣列配合迴圈一起讀取。28

public static void readtest4() throws ioexception

//關閉資源

fileinputstream.close();

long endtime = system.currenttimemillis();

system.out.println("讀取的時間是:"+ (endtime-starttime)); //446

}

——–| outputstream 是所有輸出位元組流 的父類。 抽象類

———–| fileoutstream 向檔案輸出資料的輸出位元組流。

fileoutputstream如何使用呢?

1. 找到目標檔案

2. 建立資料的輸出通道。

3. 把資料轉換成位元組陣列寫出。

4. 關閉資源

fileoutputstream要注意的細節:

1. 使用fileoutputstream 的時候,如果目標檔案不存在,那麼會自動建立目標檔案物件。 

2. 使用fileoutputstream寫資料的時候,如果目標檔案已經存在,那麼會先清空目標檔案中的資料,然後再寫入資料。

3.使用fileoutputstream寫資料的時候, 如果目標檔案已經存在,需要在原來資料基礎上追加資料的時候應該使用new fileoutputstream(file,true)建構函式,第二引數為true。

4.使用fileoutputstream的write方法寫資料的時候,雖然接收的是乙個int型別的資料,但是真正寫出的只是乙個位元組的資料,只是

把低八位的二進位制資料寫出,其他二十四位資料全部丟棄。

//找到目標檔案

file infile = new file("f:\\美女\\1.jpg");

//建立資料的輸入輸出通道

fileinputstream fileinputstream = new fileinputstream(infile);

fileoutputstream fileoutputstream = new fileoutputstream(destfile); //追加資料....

//每新建立乙個fileoutputstream的時候,預設情況下fileoutputstream 的指標是指向了檔案的開始的位置。 每寫出一次,指向都會出現相應移動。

//建立緩衝資料,邊讀邊寫

byte buf = new byte[1024];

int length = 0 ;

while((length = fileinputstream.read(buf))!=-1)

//關閉資源 原則: 先開後關,後開先關。

fileoutputstream.close();

fileinputstream.close();

fileoutputstream 在檔案末尾追加內容

建立乙個向具有指定 name 的檔案中寫入資料的輸出檔案流。如果第二個引數為 true,則將位元組寫入檔案末尾處,而不是寫入檔案開始處。

new 的時候加乙個true引數則是追加。預設為false,則是覆蓋。

—-| inputstream 輸入位元組流的基類。 抽象

———-| fileinputstream 讀取檔案資料的輸入位元組流

———-| bufferedinputstream 緩衝輸入位元組流 緩衝輸入位元組流的出現主要是為了提高讀取檔案資料的效率。

其實該類內部只不過是維護了乙個8kb的位元組陣列而已。

注意: 凡是緩衝流都不具備讀寫檔案的能力。

使用bufferedinputstream的步驟 :

1. 找到目標檔案。

2. 建立資料 的輸入通道

3. 建立緩衝 輸入位元組流流

4. 關閉資源

——–| outputstream 所有輸出位元組流的基類 抽象類

————| fileoutputstream 向檔案 輸出資料 的輸出位元組流

————| bufferedoutputstream 緩衝輸出位元組流 bufferedoutputstream出現的目的是為了提高寫資料的效率。

內部也是維護了乙個8kb的位元組陣列而已。

使用bufferedoutputstream的步驟:

1. 找到目標檔案

2. 建立資料的輸出通道

bufferedoutputstream 要注意的細節

1. 使用bufferedoutstream寫資料的時候,它的write方法是是先把資料寫到它內部維護的位元組陣列中。

2. 使用bufferedoutstream寫資料的時候,它的write方法是是先把資料寫到它內部維護的位元組陣列中,如果需要把資料真正的寫到硬碟上面,需要

呼叫flush方法或者是close方法、 或者是內部維護的位元組陣列已經填滿資料的時候。

//找到目標檔案

file infile = new file("f:\\美女\\1.jpg");

//建立資料輸入輸出通道

fileinputstream fileinputstream = new fileinputstream(infile);

fileoutputstream fileoutputstream = new fileoutputstream(outfile);

//建立緩衝輸入輸出流

bufferedinputstream bufferedinputstream = new bufferedinputstream(fileinputstream);

bufferedoutputstream bufferedoutputstream = new bufferedoutputstream(fileoutputstream);

//邊讀邊寫

int content = 0;

// int length = bufferedinputstream.read(buf); 如果傳入了緩衝陣列,內容是儲存到緩衝陣列中,返回值是儲存到緩衝陣列中的位元組個數。

while((content = bufferedinputstream.read())!=-1)

//關閉資源

bufferedinputstream.close();

bufferedoutputstream.close();

java IO流 位元組流讀寫中文

位元組流讀取中文的問題 位元組流在讀中文的時候有可能會讀到半個中文,造成亂碼 fileinputstream fis new fileinputstream yyy.txt byte arr new byte 4 int len while len fis.read arr 1 位元組流寫出中文的問...

javaIO之檔案位元組流

解釋 file類主要就是檔案在磁碟上的儲存,以及在磁碟上的一些操作,如重新命名,刪除等。1.1檔案的建立 1 createnewfile 方法 在指定位置建立乙個空檔案,如果檔案已經存在了,那麼就不會建立了。建立成功返回值為true,建立失敗就返回false。2 mkdir 方法 在指定位置建立乙個...

位元組流讀寫

1 inputstream 抽象了應用程式讀取資料的方式 outputstream 抽象了應用程式寫出資料的方式 2 輸入流的基本方法 inputstream in new inputstream int b in.read 讀取乙個位元組無符號填充到int的最後8位,返回的是讀到的位元組 換成in...