Java進階11 IO流、功能流

Java進階11 IO流-功能流

一、字符緩沖流

字符緩沖流在源代碼中內置了字符數組,可以提高讀寫效率

1、構造方法

方法說明
BufferedReader(new FileReader(文件路徑))對傳入的字符輸入流進行包裝
BufferedWriter(new FileWriter(文件路徑))對傳入的字符輸出流進行包裝

注意:緩沖流不具備讀寫功能,它們只是對普通的流對象進行包裝,正真和文件建立關聯的,還是普通流對象

1.1 字符緩沖流的使用
public class BufferedStreamDemo1 {/*1、字符緩沖流的基本使用*/public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new FileReader("day10\\A.txt"));
?//單個讀取int i;while((i=br.read())!=-1){System.out.println((char)i);}
?//讀取字符數組的一部分int len;char[] chs = new char[1024];while((len=br.read())!=-1){String s = new String(chs,0,len);System.out.println(s);}
?br.close();
?//字符緩沖輸出流BufferedWriter bw = new BufferedWriter(new FileWriter("day10\\A.txt"));bw.write("寫入數據......")bw.close();}
}
1.2 拷貝文件Demo
public class BufferedStreamDemo {/*字符緩沖流+自定義數組  拷貝文件*/public static void main(String[] args) throws IOException {//字符流只能拷貝純文本文件BufferedReader br = new BufferedReader(new FileReader("day11\\FileReaderDemo1.java"));BufferedWriter bw = new BufferedWriter(new FileWriter("day11\\copy.java"));
?int len;char[] chs = new char[1024];while((len=br.read())!=-1){bw.write(chs,0,len);}br.close();bw.close();}
}

2、成員方法(特有)

2.1 BufferedReader
方法說明
public String readLine()一次性讀取整行字符串,讀取到末尾返回null
2.2 BufferedWriter
方法說明
public void newLine()寫出換行符(具有兼容性)兼容各個操作系統的換行符
2.3 特有方法使用Demo
public class BufferedStreamDemo2 {/*拷貝本項目中A.txt文件到本項目copy.txt;一整行一整行地拷貝*/public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new FileReader("day11\\A.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("day11\\copy.txt"));
?String line;while((line=br.readLine())!=null){//readLine讀不到換行符bw.write(line);//寫出換行符bw.newLine();}br.close();bw.close();}
}

二、轉換流

1、按照指定的字符編碼讀寫操作

構造方法說明
InputStreamReader(InputStream in,String charsetName)按照指定的字符編碼讀取
OutputStreamWriter(OutputStream out,String charsetName)按照指定的字符編碼寫出
public class ChangeStreamDemo {/*轉換流的使用Demo*/public static void main(String[] args) throws IOException {//使用GBK字符編碼向路徑D:\itheima\Resource\A.txt文件寫入你好呀OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\\itheima\\Rescouce\\A.txt"),"GBK");osw.write("你好呀");osw.close();
?//使用gbk字符編碼從路徑D:\itheima\Resource\A.txt文件中讀取字符InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\itheima\\Resource\\A.txt"),"gbk");//單個讀取int i;while((i=isr.read())!=-1){System.out.print((char)i);}isr.close();}
}

2、將字節流轉換為字符流進行操作

  • 應用場景

三、序列化流

可以在流中,以字節的形式直接讀寫對象

1、構造方法

方法說明
public ObjectInuputStream(InputStream in)對象輸入流關聯文件,關聯方式使用字節輸入流
public ObjectOutputStream(OutoutStream out)對象輸出流關聯文件,關聯方式使用字節輸出流

2、成員方法

方法說明
Object readObject()從流中讀取對象(反序列化)
void writeObject(Object obj)在流中將對象寫出(序列化)

3、方法使用案例

需求:現有3個學生對象,并將對象序列化到流中,隨后完成反序列化操作

public class ObjectStreamDemo2 {public static void main(String[] args) throws IOException, ClassNotFoundException {readObject();
?//用流讀對象ObjectInputStream ois = new ObjectInputStream(new FileInputStream("day11\\obj.txt"));ArrayList<Student> stuList ?= (ArrayList<Student>) ois.readObject();System.out.println(stuList);ois.close();}
?//將對象寫入流private static void readObject() throws IOException {//為了一次讀寫三個學生對象,創建list集合存儲ArrayList<Student> stu = new ArrayList<>();stu.add(new Student("張三",23));stu.add(new Student("李四",24));stu.add(new Student("王五",25));
?ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("day11\\obj.txt"));oos.writeObject(stu);oos.close();}
}

注意事項

  • 類需要實現Serializable接口才可以序列化

  • 實現接口后,類就會自帶一份序列版本號。序列化操作的時候,會將對象信息和版本號一并保存到文件,反序列化的時候,會拿著版本號和流中的版本號進行對比,不一致就會拋異常,起到提醒作用。為了避免這個問題,推薦手動寫死serialVersionUID

    在IDEA中設置快捷添加serialVersionUID的快捷鍵

  • 如果類中的屬性被transient進行修飾,將不會參與序列化操作

  • 建議:對象的讀寫操作只進行一次

四、打印流

打印流可以實現方便、高效的打印數據到文件中去(打印什么數據就是什么數據)

1、PrintStream字節打印流(重點)

構造器說明
public PrintStream(OutputStream os)打印流直接通向字節輸出流管道(想要追加時可在os對象的第二個參數位置打開append追加開關)
public PrintStream(File f)打印流直接通向文件對象
public PrintStream(String filepath)打印流直接通向文件路徑
成員方法說明
public void print\println(Xxx xxx)打印任意類型的數據出去

2、PrintWriter字符打印流(了解即可)

構造器說明
public PrintWriter(OutputStream os)打印流直接通向字節輸出流管道
public PrintWriter(Writer w)打印流直接通向字符輸出流管道
public PrintWriter(File f)打印流直接通向文件對象
public PrintWriter(String filepath)打印流直接通向文件路徑
方法說明
public void print\println(Xxx xxx)打印任意類型的數據出去

五、Properties集合

1、Properties作為集合使用

構造器說明
Properties()創建一個沒有默認值的空屬性列表
方法說明
Object setProperty(String key,String value)添加(修改)一個鍵值對
String getPreperty(String key,String defaultValue)根據鍵獲取值
Set<String> stringPropertyNames()獲取集合中所有的鍵
public class PropertiesDemo1 {/*properties作為集合的使用*/public static void main(String[] args) {//1、創建集合容器(不需要指定泛型,鍵和值都是String類)Properties prop = new Properties();//2、添加數據到集合(類似于put方法,當key相同時,新value會覆蓋舊value)prop.setProperty("username","admin");prop.setProperty("passward","123456");
?//3、獲取集合數據,根據鍵找值String username = prop.getProperty("username");String passward = prop.getProperty("passward");System.out.println(username+"----"+passward);
?System.out.println("-------------------------------");
?//4、類似Map集合中keySet方法,獲取所有的鍵Set<String> keySet = prop.stringPropertyNames();//5、遍歷集合+根據鍵找值拿到properties集合中的所有鍵值對for (String key : keySet) {System.out.println(key+"----"+prop.get(key));}}
}

2、Properties和IO有關的方法

方法說明
void load(InputStream inStream)從輸入字節流讀取屬性列表(鍵和元素對)
void load(Reader reader)從輸入字符流讀取屬性列表(鍵和元素對)
void store(OutputStream out,String comments)將此屬性列表(鍵和元素對)寫入此Properties表中,以適合于使用load(InputStream)方法的格式寫入輸出字符流
void store(Writer writer,String comments)將次屬性列表(鍵和元素對)寫入此Properties表中,以適合使用load(Reader)方法的格式寫入輸出字符流
public class PropertiesDemo2 {/*以字節輸入輸出流為例*/public static void main(String[] args) throws IOException {store();load();}
?//讀取方法private static void load() throws IOException {Properties prop = new Properties();FileInputStream fis = new FileInputStream("day11\\config.properties");//將讀取到的內容存入prop集合prop.load(fis);System.out.println(prop);fis.close();
?/**經常需要修改的值(如用戶名密碼、數據庫連接密碼等)寫在配置文件里,到時候只要執行這個代碼就能直接加載配置文件里的一些設置,免去了頻繁修改代碼的繁瑣*/String username = prop.getProperty("username");String password = prop.getProperty("password");
?System.out.println(username);System.out.println(password);}
?//寫入方法private static void store() throws IOException {Properties prop = new Properties();prop.setProperty("username","admin");prop.setProperty("password","123456");
?FileOutputStream fos = new FileOutputStream("day11\\cpnfig.properties");
?//第二個參數為備注內容,可傳null,也可以傳入字符串值prop.store(fos,"null");
?fos.close();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12547.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12547.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12547.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電子商務電商數據采集接口||電子商務市場數據采集方法,你學到了嗎?

小劉從某職業院校電子商務專業畢業后&#xff0c;-直在某品牌電商部負責運營工作&#xff0c;近期&#xff0c;同班同學小王邀請小劉加入創業大軍&#xff0c;共同開設網店&#xff0c;銷售家鄉的螃蟹、鮮蝦、扇貝等生鮮水產。 運營經驗豐富的小劉決定&#xff0c;在創業開始前…

java處理視頻

文章目錄 JCodecXuggle(已被棄用)FFmpegjavacvjave經過調研,目前市面上主流的有以下幾種: JCodec 優勢: 簡單。不提供視頻編輯或錄制功能。缺點: 只能通過File的方式獲取視頻信息,無法通過url方式獲取無法轉為M3U8格式使用: <dependency><groupId>org.jc…

IT工具集項目

網址 https://github.com/CorentinTh/it-tools?tabreadme-ov-file 類似的項目應該有很多&#xff0c;提供各種it人員的小工具

SDN 實現 vxlan隧道

SDN vxlan隧道 官方介紹&#xff1a; VXLAN&#xff08;Virtual eXtensible Local Area Network&#xff0c;虛擬擴展局域網&#xff09;&#xff0c;是由IETF定義的NVO3&#xff08;Network Virtualization over Layer 3&#xff09;標準技術之一&#xff0c;是對傳統VLAN協議…

電子商務員考試題庫(二)

21&#xff0e;物流活動實際上就是我們常說的儲運業。〔〕 22. 電子商務不僅要求物流管理人員既具有較高的物流管理水平&#xff0c;而且也要求物流管理員要具有較 高的電子商務知識&#xff0c;并在實際的動作過程中&#xff0c;能有效地將二者有機地結合在一起。〔 √ 〕 …

環境工程設計專項資質乙級如何升甲級

環境工程設計專項資質乙級升甲級的流程和要求可能因地區和具體規定而有所不同&#xff0c;但一般來說&#xff0c;以下是一些常見的步驟和要求&#xff1a; 前期準備&#xff1a; 資質自查&#xff1a;首先&#xff0c;企業需要確認自身是否已經滿足甲級資質的各項基本條件&…

行業早報5.15

1.宏達電&#xff08;HTC&#xff09;4 月營收新臺幣 1.73 億元&#xff0c;同比減少 42.4%&#xff1b; 2.TCL 實業 2023 年營收突破 1200 億元&#xff0c;同比增長 13%&#xff1b; 3.乘聯會&#xff1a;初步統計 4 月乘用車市場零售 158.5 萬輛&#xff0c;同比下降 2%&…

c語言字符數組的一些操作

獲取數組的實際長度和數組的總長度 #include <getopt.h> #include <stdio.h> #include <stdlib.h>#define MAX_PATH 256 char filename[MAX_PATH 5]; int main(int argc, char** argv) {const char* optarg "xuhaitao";strcpy(filename, op…

中途離開項羽投奔劉邦的那些名將謀臣,最后的結果怎么樣?

劉邦奪取天下后&#xff0c;說&#xff1a;我自己沒什么能力&#xff0c;之所以擊敗項羽&#xff0c;都是大家的功勞。帶兵橫掃強敵&#xff0c;我不如韓信&#xff1b;籌措糧草物資&#xff0c;源遠不斷地給前線供應糧餉&#xff0c;我不如蕭何&#xff1b;坐在帳中&#xff0…

地平線旭日X3開發板編譯USB網卡驅動 AX88772B

由于使用的激光雷達是網口輸出的&#xff0c; 為了不占用X3派已有的網口&#xff0c;接上去了一個綠聯的usb網卡&#xff0c; 發現系統沒有驅動&#xff0c;所以動手看看能不能自己編譯一個 首先lsusb查看一下網卡型號 發現型號是AX88772B&#xff0c;去官網看了一下&#x…

記錄用python跑csdn點贊接口

代碼如下 # 導入request包 import requests # 請求URL URL3https://blog.csdn.net//phoenix/web/v1/article/like # 入參 data3{articleId:109552419} # 請求頭 headers3{cookie:uuid_tt_dd10_30308678820-1713771851124-190368; loginbox_strategy%7B%22taskId%22%3A349%2C%2…

社交時代的象征:探索Facebook的文化影響

在當今社交媒體盛行的時代&#xff0c;Facebook作為其中的巨頭之一&#xff0c;不僅是一個網絡平臺&#xff0c;更是社交文化的象征。本文將深入探討Facebook在社交時代的文化影響&#xff0c;從用戶行為到社會互動&#xff0c;從信息傳播到文化交流&#xff0c;揭示其在塑造當…

穿越網絡界限:探索NAT IPv4的神秘面紗

歡迎來到我的博客&#xff0c;代碼的世界里&#xff0c;每一行都是一個故事 穿越網絡界限&#xff1a;探索NAT IPv4的神秘面紗 前言NAT IPv4概述NAT IPv4的類型NAT IPv4的工作流程NAT IPv4的局限性和挑戰 前言 在我們日常的網絡使用中&#xff0c;我們或多或少都會遇到NAT&…

華為 2024 屆實習校園招聘-硬件通?/單板開發——第六套

華為 2024 屆實習校園招聘-硬件通?/單板開發——第六套 部分題目分享&#xff0c;完整版帶答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔細校正&#xff0c;僅供參考&#xff09;&#xff08;共十套&#xff0c;每套四十題選擇題&#xff09;獲取&#xff08;WX:…

計算機發展史故事【15】

PC 新霸主 IBM PC 個人電腦&#xff0c;為IBM 公司創造了本世紀最輝煌的業績。想當初&#xff0c;IBM 公司仰仗PC 電腦的“開放”政策&#xff0c;公開技術標準&#xff0c;鼓勵同業仿照&#xff0c;其目的當然是想盡快以PC 機取代蘋果電腦的主流地位&#xff0c;占領全球市場。…

2024年合肥市激勵培育產教融合型企業專項資金申報材料、條件及時間

2024年合肥市激勵培育產教融合型企業專項資金申報材料、條件及時間等內容如下&#xff0c;合肥市的企業單位可以看看&#xff0c;符合條件的可以進行申報 一、支持范圍及重點 本項目資金主要支持產教融合型企業優質校企合作項目(典型項目),鼓勵企業深度參與職業院校專業建設、…

如何優化Unity發布iOS編譯出來的Framework文件過大問題

1&#xff09;如何優化Unity發布iOS編譯出來的Framework文件過大問題 2&#xff09;Scriptable Build Pipeline打包Scritptable Object報錯 3&#xff09;APK在OPPO上報編譯錯誤 4&#xff09;如何在Sequence中模擬我的藍圖 這是第385篇UWA技術知識分享的推送&#xff0c;精選了…

Java(二)——方法與數組

文章目錄 方法與數組方法方法的定義方法的執行實參與形參方法重載方法簽名 數組創建與初始化數組的類型數組應用轉字符串排序查找&#xff08;二分&#xff09;填充拷貝判等 二維數組創建及初始化遍歷本質和內存分布不規則二維數組 方法與數組 方法 什么是方法&#xff1f; …

C++學習筆記(20)——模板的進階與繼承(一)

系列文章 http://t.csdnimg.cn/u80hL 目錄 系列文章[TOC](目錄) 一、定義二、迭代器——六大組件之一封裝的作用封裝要注意的點迭代器封裝設計很巧妙迭代器適配器 一、定義 訪問容器有時使用原生指針&#xff0c;有時迭代器為了避免復雜化統一使用迭代器。 容器與算法不分離&…

Linux-vi、vim

使用Xshell遠程登錄到Linux主機進行操作 命令行不用全部掌握&#xff0c; 一般編輯大文件&#xff0c;比較復雜的情況下&#xff0c; 我們還是使用Xftp工具&#xff0c; down下來再恢復回去。