Java中的IO流之輸出流

大家好,樂字節(jié)小樂又來了辉懒。上一篇給大家?guī)淼氖牵?a target="_blank">Java中的IO流之輸入流|樂字節(jié)清女,本文將繼續(xù)講述IO流之輸出流钱烟。

一、輸出流

1校仑、抽象類:OutputStream 和 Writer

OutputStream和Writer也非常相似忠售。

在OutputStream 里包含如下方法:


在 Writer 中, 因為字符流直接以字符作為操作單位,所以 Writer 可以用字符串來代替字符數(shù)組迄沫,即以String對象來作為參數(shù)稻扬。 包含如下方法:


2、文件節(jié)點類: FileOutputStream 和 FileWriter

FileOutputStream 和 FileWriter羊瘩,它們都是節(jié)點流泰佳,直接和指定文件關(guān)聯(lián)。

public class WriteFile {

public static void main(String[] args) {

//1尘吗、建立聯(lián)系? File對象? 源頭 目的地

File dest=new File("c:/IO/print.txt");

//2逝她、選擇流? ? 文件輸出流? OutputStream FileOutputStream

OutputStream out=null;

//以追加形式寫出文件? 必須為true 否則會覆蓋

try {

out=new FileOutputStream(dest,true);

//3、操作

String str="shsxt is very good \r\n good good good";

//字符串轉(zhuǎn)成字節(jié)數(shù)組

byte[] data=str.getBytes();

out.write(data,0,data.length);

out.flush();//強制刷新出去

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("文件未找到");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("文件寫出失敗");

}finally{

try {

if(out!=null){

out.close();

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("關(guān)閉輸出流失敗");

}

}

}

}

//1睬捶、創(chuàng)建源

File dest=new File("f:/IO/char.txt");

//2黔宛、選擇流

Writer wr=new FileWriter(dest,true);

//3、寫出

String str="鋤禾日當午\r\n碼農(nóng)真辛苦\r\n一本小破書\r\n一讀一上午";

? ? ? wr.write(str);

//追加內(nèi)容

wr.append("我就是追加進去的");

wr.flush();//強制刷出

//4擒贸、關(guān)閉資源

wr.close();

?結(jié)合輸入輸出流臀晃,可以實現(xiàn)文件拷貝

public static void copyFile(String srcPath, String destPath) throws FileNotFoundException,IOException{

// 1觉渴、建立聯(lián)系 源(存在且為文件) 目的地(文件可以不存在)

File src = new File(srcPath);

File dest = new File(destPath);

if(!src.isFile()){//不是文件或者為null時拋出異常

System.out.println("只能拷貝文件");

throw new IOException("只能拷貝文件");

}

// 2、選擇流

InputStream in = new FileInputStream(src);

OutputStream out = new FileOutputStream(dest);

// 3徽惋、操作

byte[] flush = new byte[1024];

int len = 0;

// 讀取

while (-1 != (len = in.read(flush))) {

// 寫出

out.write(flush, 0, len);

}

out.flush();// 強制刷出

// 關(guān)閉流 先打開的后關(guān)閉

out.close();

in.close();

}

3案淋、緩沖處理流:BufferedOutputStream 和 BufferedWriter

緩沖流提升性能,BufferedWriter存在新增方法newLine()险绘,不能發(fā)生多態(tài)

public static void copyFile(String srcPath, String destPath) throws FileNotFoundException,IOException{

// 1踢京、建立聯(lián)系 源(存在且為文件) 目的地(文件可以不存在)

File src = new File(srcPath);

File dest = new File(destPath);

if(!src.isFile()){//不是文件或者為null時拋出異常

System.out.println("只能拷貝文件");

throw new IOException("只能拷貝文件");

}

// 2、選擇流

InputStream in = new BufferedInputStream(new FileInputStream(src));

OutputStream out =new BufferedOutputStream(new FileOutputStream(dest));

// 3宦棺、操作

byte[] flush = new byte[1024];

int len = 0;

// 讀取

while (-1 != (len = in.read(flush))) {

// 寫出

out.write(flush, 0, len);

}

out.flush();// 強制刷出

// 關(guān)閉流 先打開的后關(guān)閉

out.close();

in.close();

}

}? ?

? ? ? ? ? ? ? ? ? ? ? //1瓣距、創(chuàng)建源 ? 僅限于 字符的純文本

File src=new File("f:/char.txt");

File dest=new File("f:/testIO/char.txt");

//2、選擇流

BufferedReader reader=new BufferedReader(new FileReader(src));

BufferedWriter wr=new BufferedWriter(new? FileWriter(dest,true));pend(msg2);

? ? ? ? ? ? ? ? ? ? //3代咸、新增方法操作

String line=null;

while(null!=(line=reader.readLine())){

wr.write(line);

//wr.append("\r\n");

//換行符號

wr.newLine();

}

wr.flush();//強制刷出

// 4旨涝、關(guān)閉流 先打開的后關(guān)閉

out.close();

in.close();

4、轉(zhuǎn)換處理流:OutputStreamWriter

可以處理文件的字符集侣背,即將文件按指定字符集進行編碼存儲 。

//寫出文件 編碼

BufferedWriter bw=new BufferedWriter(

new OutputStreamWriter(

new BufferedOutputStream(

new FileOutputStream(

new File("f:/testIO/char.txt")

)

),"utf-8"

)

);

String info=null;

while(null!=(info=br.readLine())){

bw.write(info);

bw.newLine();

}

bw.flush();

bw.close();

5慨默、字節(jié)數(shù)組節(jié)點類: ByteArrayOutputStream

/**

* 字節(jié)數(shù)組輸出流:操作與文件輸出流有些不同贩耐,有新增方法,所以不可以使用多態(tài)

* @throws IOException

*/

public static byte[] write() throws IOException{

//目的地 字節(jié)數(shù)組

byte[]dest;

//選擇流 不同點:不需要將目的地放入new ByteArrayOutputStream()

ByteArrayOutputStream bos=new ByteArrayOutputStream();

//操作 寫出, 可以當作將本地的內(nèi)容通過字節(jié)數(shù)組寫入服務器

String msg="字節(jié)數(shù)組輸入流:操作與文件輸入流操作一致";

byte[]info=msg.getBytes();

//將內(nèi)容寫入bos

bos.write(info,0,info.length);

//不同點:獲取數(shù)據(jù) toByteArray():是將字節(jié)數(shù)組輸出流轉(zhuǎn)為字節(jié)數(shù)組

dest=bos.toByteArray();

//釋放資源

bos.close();//由于bos在jvm中厦取,所以關(guān)閉與否不影響

return dest;

}

再來看幾個作業(yè)題潮太,大家不妨思考思考。

1虾攻、Reader和Writer的基本特點是?

2铡买、FileReader和FileWriter的作用是?

3、BufferedReader和BufferedWriter的作用是?

4霎箍、word文檔能使用字符流操作嗎?為什么?

5奇钞、使用BufferedReader和BufferedWriter實現(xiàn)文本文件的拷貝

6、什么情況下可以使用字符流拷貝文件夾漂坏?什么情況下不能景埃?拷貝文件夾應該使用字符流還是字節(jié)流?

7、拷貝文件 使用哪些流顶别?

8谷徙、InputStreamReader和OutputStreamWriter的作用。

9驯绎、ByteArrayInputStream與 ByteArrayOutputStream的數(shù)據(jù)源是什么?

10完慧、為什么ByteArrayOutputStream 不推薦使用匿名?

11剩失、將”堅信沒有學不會的知識屈尼,只有不想學的知識”寫出到字節(jié)數(shù)組中册着。

12、從上述的 字節(jié)數(shù)組中鸿染,讀取字符串指蚜。

13、DataInputStream和DataOutputStream的特點是?

14涨椒、將3.14 寫出到字節(jié)數(shù)組中摊鸡,再進行讀取

15、序列化和反序列化指的是什么?

16蚕冬、想序列化某個類的對象免猾,該類必須實現(xiàn)Serializable接口嗎?

17、說說Serializable接口的特點囤热。

18猎提、transient的作用是?

19旁蔼、使用ObjectInputstream和ObjectOutputStream實現(xiàn)將某個對象存儲到硬盤上锨苏,然后再讀到程序中。

20棺聊、PrintStream打印流經(jīng)常用于什么情況?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伞租,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子限佩,更是在濱河造成了極大的恐慌葵诈,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祟同,死亡現(xiàn)場離奇詭異作喘,居然都是意外死亡,警方通過查閱死者的電腦和手機晕城,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門泞坦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人广辰,你說我怎么就攤上這事暇矫。” “怎么了择吊?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵李根,是天一觀的道長。 經(jīng)常有香客問我几睛,道長房轿,這世上最難降的妖魔是什么迎罗? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任蚌本,我火速辦了婚禮溪窒,結(jié)果婚禮上闲擦,老公的妹妹穿的比我還像新娘。我一直安慰自己纷妆,他們只是感情好盔几,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掩幢,像睡著了一般逊拍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上际邻,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天芯丧,我揣著相機與錄音,去河邊找鬼世曾。 笑死缨恒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的轮听。 我是一名探鬼主播骗露,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼血巍!你這毒婦竟也來了椒袍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤藻茂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后玫恳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辨赐,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年京办,在試婚紗的時候發(fā)現(xiàn)自己被綠了掀序。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡惭婿,死狀恐怖不恭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情财饥,我是刑警寧澤换吧,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站钥星,受9級特大地震影響沾瓦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一贯莺、第九天 我趴在偏房一處隱蔽的房頂上張望风喇。 院中可真熱鬧,春花似錦缕探、人聲如沸魂莫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耙考。三九已至,卻和暖如春鲸沮,著一層夾襖步出監(jiān)牢的瞬間琳骡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工讼溺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留楣号,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓怒坯,卻偏偏與公主長得像炫狱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子剔猿,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容