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