日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java基础----IO-----第四天

發(fā)布時(shí)間:2024/1/18 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java基础----IO-----第四天 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

4IO

今日內(nèi)容介紹

u?字節(jié)流

u?字符流

第4章?字節(jié)流

1.1?字節(jié)輸出流OutputStream

OutputStream此抽象類是表示輸出字節(jié)流的所有類的超類。操作的數(shù)據(jù)都是字節(jié),定義了輸出字節(jié)流的基本共性功能方法。

輸出流中定義都是寫write方法,如下圖:

?

1.1.1?FileOutputStream

OutputStream有很多子類,其中子類FileOutputStream可用來寫入數(shù)據(jù)到文件。

FileOutputStream,即文件輸出流是用于將數(shù)據(jù)寫入 File的輸出流。

l?構(gòu)造方法

?

1.1.2?FileOutputStream類寫入數(shù)據(jù)到文件中

l?將數(shù)據(jù)寫到文件中,代碼演示:

public?class?FileOutputStreamDemo {

public?static?void?main(String[] args) throws?IOException {

//需求:將數(shù)據(jù)寫入到文件中。

//創(chuàng)建存儲(chǔ)數(shù)據(jù)的文件。

File file = new?File("c:\\file.txt");

//創(chuàng)建一個(gè)用于操作文件的字節(jié)輸出流對象。一創(chuàng)建就必須明確數(shù)據(jù)存儲(chǔ)目的地。

//輸出流目的是文件,會(huì)自動(dòng)創(chuàng)建。如果文件存在,則覆蓋。

FileOutputStream fos = new?FileOutputStream(file);

//調(diào)用父類中的write方法。

byte[] data = "abcde".getBytes();

fos.write(data);

//關(guān)閉流資源。

fos.close();

}

}

?

1.1.3?給文件中續(xù)寫和換行

我們直接new?FileOutputStream(file)這樣創(chuàng)建對象,寫入數(shù)據(jù),會(huì)覆蓋原有的文件,那么我們想在原有的文件中續(xù)寫內(nèi)容怎么辦呢?

繼續(xù)查閱FileOutputStreamAPI。發(fā)現(xiàn)在FileOutputStream的構(gòu)造函數(shù)中,可以接受一個(gè)boolean類型的值,如果值true,就會(huì)在文件末位繼續(xù)添加。

l?構(gòu)造方法

?

l?給文件中續(xù)寫數(shù)據(jù)和換行,代碼演示:

public?class?FileOutputStreamDemo2 {

public?static?void?main(String[] args) throws?Exception {

File file = new?File("c:\\file.txt");

FileOutputStream fos = new?FileOutputStream(file, true);

String str = "\r\n"+"itcast";

fos.write(str.getBytes());

fos.close();

}

}

1.1.4?IO異常的處理

在前面編寫代碼中都發(fā)生了IO的異常。我們在實(shí)際開發(fā)中,對異常時(shí)如何處理的,我們來演示一下。

public?class?FileOutputStreamDemo3 {

public?static?void?main(String[] args) {

File file = new?File("c:\\file.txt");

//定義FileOutputStream的引用

FileOutputStream fos = null;

try?{

//創(chuàng)建FileOutputStream對象

fos = new?FileOutputStream(file);

//寫出數(shù)據(jù)

fos.write("abcde".getBytes());

} catch?(IOException e) {

System.out.println(e.toString() + "----");

} finally?{

//一定要判斷fos是否為null,只有不為null時(shí),才可以關(guān)閉資源

if?(fos != null) {

try?{

fos.close();

} catch?(IOException e) {

throw?new?RuntimeException("");

}

}

}

}

}

1.2?字節(jié)輸入流InputStream

通過前面的學(xué)習(xí),我們可以把內(nèi)存中的數(shù)據(jù)寫出到文件中,那如何想把內(nèi)存中的數(shù)據(jù)讀到內(nèi)存中,我們通過InputStream可以實(shí)現(xiàn)。InputStream此抽象類是表示字節(jié)輸入流的所有類的超類。,定義了字節(jié)輸入流的基本共性功能方法。

?

l?int read():讀取一個(gè)字節(jié)并返回,沒有字節(jié)返回-1.

l?int read(byte[]): 讀取一定量的字節(jié)數(shù),并存儲(chǔ)到字節(jié)數(shù)組中,返回讀取到的字節(jié)數(shù)。

1.2.1?FileInputStream

InputStream有很多子類,其中子類FileInputStream可用來讀取文件內(nèi)容。

FileInputStream 從文件系統(tǒng)中的某個(gè)文件中獲得輸入字節(jié)。


l?構(gòu)造方法

?

1.2.2?FileInputStream類讀取數(shù)據(jù)read方法

在讀取文件中的數(shù)據(jù)時(shí),調(diào)用read方法,實(shí)現(xiàn)從文件中讀取數(shù)據(jù)

?

l?從文件中讀取數(shù)據(jù),代碼演示:

public?class?FileInputStreamDemo {

public?static?void?main(String[] args) throws?IOException {

File file = new?File("c:\\file.txt");

//創(chuàng)建一個(gè)字節(jié)輸入流對象,必須明確數(shù)據(jù)源,其實(shí)就是創(chuàng)建字節(jié)讀取流和數(shù)據(jù)源相關(guān)聯(lián)。

FileInputStream fis = new?FileInputStream(file);

//讀取數(shù)據(jù)。使用 read();一次讀一個(gè)字節(jié)。

int?ch = 0;

while((ch=fis.read())!=-1){

System.out.pr}intln("ch="+(char)ch);

?

// 關(guān)閉資源。

fis.close();

}

}

?

1.2.3?讀取數(shù)據(jù)read(byte[])方法

在讀取文件中的數(shù)據(jù)時(shí),調(diào)用read方法,每次只能讀取一個(gè),太麻煩了,于是我們可以定義數(shù)組作為臨時(shí)的存儲(chǔ)容器,這時(shí)可以調(diào)用重載的read方法,一次可以讀取多個(gè)字符。

?

public?class?FileInputStreamDemo2 {

public?static?void?main(String[] args) throws?IOException {

/*

?* 演示第二個(gè)讀取方法, read(byte[]);

?*/

File file = new?File("c:\\file.txt");

// 創(chuàng)建一個(gè)字節(jié)輸入流對象,必須明確數(shù)據(jù)源,其實(shí)就是創(chuàng)建字節(jié)讀取流和數(shù)據(jù)源相關(guān)聯(lián)。

FileInputStream fis = new?FileInputStream(file);

//創(chuàng)建一個(gè)字節(jié)數(shù)組。

byte[] buf = new?byte[1024];//長度可以定義成1024的整數(shù)倍。

int?len = 0;

while((len=fis.read(buf))!=-1){

System.out.println(new?String(buf,0,len));

}

fis.close();

}

}

1.3?字節(jié)流練習(xí)

既然會(huì)了文件的讀和寫操作了,那么我們就要在這個(gè)基礎(chǔ)上進(jìn)行更為復(fù)雜的操作。使用讀寫操作完成文件的復(fù)制。

1.3.1?復(fù)制文件

原理;讀取一個(gè)已有的數(shù)據(jù),并將這些讀到的數(shù)據(jù)寫入到另一個(gè)文件中。

?

public?class?CopyFileTest {

public?static?void?main(String[] args) throws?IOException {

//1,明確源和目的。

File srcFile = new?File("c:\\YesDir\test.JPG");

File destFile = new?File("copyTest.JPG");

//2,明確字節(jié)流 輸入流和源相關(guān)聯(lián),輸出流和目的關(guān)聯(lián)。

FileInputStream fis = new?FileInputStream(srcFile);

FileOutputStream fos = new?FileOutputStream(destFile);

//3, 使用輸入流的讀取方法讀取字節(jié),并將字節(jié)寫入到目的中。

int?ch = 0;

while((ch=fis.read())!=-1){

fos.write(ch);

}

//4,關(guān)閉資源。

fos.close();

fis.close();

}

}

上述代碼輸入流和輸出流之間是通過ch這個(gè)變量進(jìn)行數(shù)據(jù)交換的。

上述復(fù)制文件有個(gè)問題,每次都從源文件讀取一個(gè),然后在寫到指定文件,接著再讀取一個(gè)字符,然后再寫一個(gè),一直這樣下去。效率極低。

1.3.2?緩沖數(shù)組方式復(fù)制文件

上述代碼復(fù)制文件效率太低了,并且頻繁的從文件讀數(shù)據(jù),和寫數(shù)據(jù),能不能一次多把文件中多個(gè)數(shù)據(jù)都讀進(jìn)內(nèi)容中,然后在一次寫出去,這樣的速度一定會(huì)比前面代碼速度快。

public?class?CopyFileByBufferTest {

public?static?void?main(String[] args) throws?IOException {

File srcFile = new?File("c:\\YesDir\test.JPG");

File destFile = new?File("copyTest.JPG");

// 明確字節(jié)流 輸入流和源相關(guān)聯(lián),輸出流和目的關(guān)聯(lián)。

FileInputStream fis = new?FileInputStream(srcFile);

FileOutputStream fos = new?FileOutputStream(destFile);

//定義一個(gè)緩沖區(qū)。

byte[] buf = new?byte[1024];

int?len = 0;

while?((len = fis.read(buf)) != -1) {

fos.write(buf, 0, len);// 將數(shù)組中的指定長度的數(shù)據(jù)寫入到輸出流中。

}

// 關(guān)閉資源。

fos.close();

fis.close();

}

}

第2章?字符

總結(jié)

以上是生活随笔為你收集整理的java基础----IO-----第四天的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。