摘要:大家好,樂(lè)字節(jié)小樂(lè)又來(lái)了。上一篇給大家?guī)?lái)的是中的流之輸入流樂(lè)字節(jié),本文將繼續(xù)講述流之輸出流。一輸出流抽象類和和也非常相似。從上述的字節(jié)數(shù)組中,讀取字符串。
大家好,樂(lè)字節(jié)小樂(lè)又來(lái)了。上一篇給大家?guī)?lái)的是:Java中的IO流之輸入流|樂(lè)字節(jié),本文將繼續(xù)講述IO流之輸出流。
OutputStream和Writer也非常相似。
在OutputStream 里包含如下方法:
在 Writer 中, 因?yàn)樽址髦苯右宰址鳛椴僮鲉挝唬?Writer 可以用字符串來(lái)代替字符數(shù)組,即以String對(duì)象來(lái)作為參數(shù)。 包含如下方法:
FileOutputStream 和 FileWriter,它們都是節(jié)點(diǎn)流,直接和指定文件關(guān)聯(lián)。
public class WriteFile { public static void main(String[] args) { //1、建立聯(lián)系 File對(duì)象 源頭 目的地 File dest=new File("c:/IO/print.txt"); //2、選擇流 文件輸出流 OutputStream FileOutputStream OutputStream out=null; //以追加形式寫(xiě)出文件 必須為true 否則會(huì)覆蓋 try { out=new FileOutputStream(dest,true); //3、操作 String str="shsxt is very good good good good"; //字符串轉(zhuǎn)成字節(jié)數(shù)組 byte[] data=str.getBytes(); out.write(data,0,data.length); out.flush();//強(qiáng)制刷新出去 } 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("文件寫(xiě)出失敗"); }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、寫(xiě)出 String str="鋤禾日當(dāng)午 碼農(nóng)真辛苦 一本小破書(shū) 一讀一上午"; wr.write(str); //追加內(nèi)容 wr.append("我就是追加進(jìn)去的"); wr.flush();//強(qiáng)制刷出 //4、關(guān)閉資源 wr.close();
結(jié)合輸入輸出流,可以實(shí)現(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時(shí)拋出異常 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))) { // 寫(xiě)出 out.write(flush, 0, len); } out.flush();// 強(qiáng)制刷出 // 關(guān)閉流 先打開(kāi)的后關(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時(shí)拋出異常 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))) { // 寫(xiě)出 out.write(flush, 0, len); } out.flush();// 強(qiáng)制刷出 // 關(guān)閉流 先打開(kāi)的后關(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(" "); //換行符號(hào) wr.newLine(); } wr.flush();//強(qiáng)制刷出 // 4、關(guān)閉流 先打開(kāi)的后關(guān)閉 out.close(); in.close();4、轉(zhuǎn)換處理流:OutputStreamWriter
可以處理文件的字符集,即將文件按指定字符集進(jìn)行編碼存儲(chǔ)。
//寫(xiě)出文件 編碼 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é)點(diǎn)類: ByteArrayOutputStream
/** * 字節(jié)數(shù)組輸出流:操作與文件輸出流有些不同,有新增方法,所以不可以使用多態(tài) * @throws IOException */ public static byte[] write() throws IOException{ //目的地 字節(jié)數(shù)組 byte[]dest; //選擇流 不同點(diǎn):不需要將目的地放入new ByteArrayOutputStream() ByteArrayOutputStream bos=new ByteArrayOutputStream(); //操作 寫(xiě)出, 可以當(dāng)作將本地的內(nèi)容通過(guò)字節(jié)數(shù)組寫(xiě)入服務(wù)器 String msg="字節(jié)數(shù)組輸入流:操作與文件輸入流操作一致"; byte[]info=msg.getBytes(); //將內(nèi)容寫(xiě)入bos bos.write(info,0,info.length); //不同點(diǎn):獲取數(shù)據(jù) toByteArray():是將字節(jié)數(shù)組輸出流轉(zhuǎn)為字節(jié)數(shù)組 dest=bos.toByteArray(); //釋放資源 bos.close();//由于bos在jvm中,所以關(guān)閉與否不影響 return dest; }
再來(lái)看幾個(gè)作業(yè)題,大家不妨思考思考。
1、Reader和Writer的基本特點(diǎn)是?
2、FileReader和FileWriter的作用是?
3、BufferedReader和BufferedWriter的作用是?
4、word文檔能使用字符流操作嗎?為什么?
5、使用BufferedReader和BufferedWriter實(shí)現(xiàn)文本文件的拷貝
6、什么情況下可以使用字符流拷貝文件夾?什么情況下不能?拷貝文件夾應(yīng)該使用字符流還是字節(jié)流?
7、拷貝文件 使用哪些流?
8、InputStreamReader和OutputStreamWriter的作用。
9、ByteArrayInputStream與 ByteArrayOutputStream的數(shù)據(jù)源是什么?
10、為什么ByteArrayOutputStream 不推薦使用匿名?
11、將”堅(jiān)信沒(méi)有學(xué)不會(huì)的知識(shí),只有不想學(xué)的知識(shí)”寫(xiě)出到字節(jié)數(shù)組中。
12、從上述的 字節(jié)數(shù)組中,讀取字符串。
13、DataInputStream和DataOutputStream的特點(diǎn)是?
14、將3.14 寫(xiě)出到字節(jié)數(shù)組中,再進(jìn)行讀取
15、序列化和反序列化指的是什么?
16、想序列化某個(gè)類的對(duì)象,該類必須實(shí)現(xiàn)Serializable接口嗎?
17、說(shuō)說(shuō)Serializable接口的特點(diǎn)。
18、transient的作用是?
19、使用ObjectInputstream和ObjectOutputStream實(shí)現(xiàn)將某個(gè)對(duì)象存儲(chǔ)到硬盤(pán)上,然后再讀到程序中。
20、PrintStream打印流經(jīng)常用于什么情況?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75726.html
摘要:上一篇寫(xiě)到了流,這篇文章著重談?wù)勢(shì)斎肓鳎傧麓卧僬f(shuō)輸出流。一輸入流字節(jié)流和字符流的操作方式幾乎完全一樣,只是操作的數(shù)據(jù)單元不同而已。返回結(jié)果為時(shí)表明到了輸入流的結(jié)束點(diǎn)。 親愛(ài)的樂(lè)字節(jié)的小伙伴們,小樂(lè)又來(lái)分享Java技術(shù)文章了。上一篇寫(xiě)到了IO流,這篇文章著重 談?wù)勢(shì)斎肓鳎傧麓卧僬f(shuō)輸出流。 一、 輸入流 字節(jié)流和字符流的操作方式幾乎完全一樣,只是操作的數(shù)據(jù)單元不同而已 。字節(jié)流可 以操...
摘要:換句話說(shuō),套接字起到通信端點(diǎn)的作用。單個(gè)套接字是一個(gè)端點(diǎn),而一對(duì)套接字則構(gòu)成一個(gè)雙向通信信道,使非關(guān)聯(lián)進(jìn)程可以在本地或通過(guò)網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)交換。 大家好,我是樂(lè)字節(jié)小樂(lè),上次給大家講述了Java中的IO流之輸出流|樂(lè)字節(jié),本文將會(huì)給大家講述網(wǎng)絡(luò)編程。 主要內(nèi)容如下: 網(wǎng)絡(luò) 網(wǎng)絡(luò)分層 列表項(xiàng)目 IP位置 端口port 網(wǎng)絡(luò)編程 showImg(https://segmentfault.c...
摘要:流分類由此可見(jiàn),流很龐大從不同角度進(jìn)行分類數(shù)據(jù)分類按處理數(shù)據(jù)單位分為字節(jié)流和字符流。處理數(shù)據(jù)是音頻視頻文本等一切為字節(jié)流,僅能處理文本的為字符流。功能分類節(jié)點(diǎn)流和處理流。從向一個(gè)特定的設(shè)備磁盤(pán)網(wǎng)絡(luò)等讀寫(xiě)數(shù)據(jù)的流稱為節(jié)點(diǎn)流,也常被稱為低級(jí)流。 嗨嘍,小樂(lè)又來(lái)了,今天要給大家送上的技術(shù)文章是Java重點(diǎn)知識(shí)-IO流。 先來(lái)看看IO流的思維導(dǎo)圖吧。showImg(https://segmen...
摘要:但它融合了和的功能。支持對(duì)隨機(jī)訪問(wèn)文件的讀取和寫(xiě)入。的概述和作為集合的使用了解的概述類表示了一個(gè)持久的屬性集。可保存在流中或從流中加載。屬性列表中每個(gè)鍵及其對(duì)應(yīng)值都是一個(gè)字符串。 1_序列流(了解) 1.什么是序列流 序列流可以把多個(gè)字節(jié)輸入流整合成一個(gè), 從序列流中讀取數(shù)據(jù)時(shí), 將從被整合的第一個(gè)流開(kāi)始讀, 讀完一個(gè)之后繼續(xù)讀第二個(gè), 以此類推. 2.使用方式 整合兩個(gè): S...
摘要:需要注意的是很多流操作本身就會(huì)返回一個(gè)流,所以多個(gè)操作可以直接連接起來(lái),如下圖這樣,操作可以進(jìn)行鏈?zhǔn)秸{(diào)用,并且并行流還可以實(shí)現(xiàn)數(shù)據(jù)流并行處理操作。為集合創(chuàng)建并行流。 上一篇文章,小樂(lè)給大家介紹了《Java8新特性之方法引用》,下面接下來(lái)小樂(lè)將會(huì)給大家介紹Java8新特性之Stream,稱之為流,本篇文章為上半部分。 1、什么是流? Java Se中對(duì)于流的操作有輸入輸出IO流,而Jav...
閱讀 1264·2021-10-18 13:32
閱讀 2332·2021-09-24 09:47
閱讀 1323·2021-09-23 11:22
閱讀 2463·2019-08-30 14:06
閱讀 571·2019-08-30 12:48
閱讀 1997·2019-08-30 11:03
閱讀 535·2019-08-29 17:09
閱讀 2462·2019-08-29 14:10