




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第8章文件流的輸入輸出操作相關(guān)回顧
1、當(dāng)程序在運(yùn)行過程中出現(xiàn)錯誤成為異常;異常分為哪兩類?
Error類和Exception類
2、Java異常處理分為哪兩步?
捕捉異常、處理異常。
3、處理Java異常的兩種機(jī)制是什么?
捕捉處理異常(try…catch….)和拋出異常(throw和throws)。
4、異常處理有哪5個關(guān)鍵字?
try、catch、finally和throw、throws。
5、說說catch、finally和throw表示什么意思?
catch表示捕捉異常、finally表示始終都會執(zhí)行的代碼塊、throw表示拋出異常。相關(guān)回顧……System.out.print("請輸入課程代號(1至3之間的數(shù)字):");Scannerin=newScanner(System.in);try{intcourseCode=in.nextInt();switch(courseCode){ case1: System.out.println("C#編程"); break; case2: System.out.println("Java編程"); break; case3: System.out.println("SQL基礎(chǔ)");}}catch(Exceptionex){System.out.println("輸入不為數(shù)字!");}finally
{System.out.println("歡迎提出建議!");}輸入:2Java編程歡迎提出建議!控制臺輸出輸入:B輸入不為數(shù)字!歡迎提出建議!第一種情況:無異常第二種情況:有異常相關(guān)回顧
1、當(dāng)程序在運(yùn)行過程中出現(xiàn)錯誤成為異常;異常分為哪兩類?
Error類和Exception類
2、Java異常處理分為哪兩步?
捕捉異常、處理異常。
3、處理Java異常的兩種機(jī)制是什么?
捕捉處理異常(try…catch….)和拋出異常(throw和throws)。
4、異常處理有哪5個關(guān)鍵字?
try、catch、finally和throw、throws。
5、說說catch、finally和throw表示什么意思?
catch表示捕捉異常、finally表示始終都會執(zhí)行的代碼塊、throw表示拋出異常。預(yù)習(xí)檢查文件的定義是什么?File類是文件和目錄的抽象表示形式。File類常用的方法有哪些,列舉三個?exists()、isFile()、isDirectory()、length()、getName()寫二進(jìn)制文件可以使用哪兩個類?FileOutputStream、FileWriter對象序列化與反序列化使用哪兩個類?ObjectOutputStream、ObjectInputStream本章任務(wù)1、創(chuàng)建文件對象。2、讀寫文本文件。3、讀寫二進(jìn)制文件。4、對象的序列化與反序列化。了解文件與流的概念掌握File類掌握文本文件的讀寫操作掌握二進(jìn)制文件的讀寫操作了解對象的序列化、反序列化操作本章目標(biāo)為什么要使用文件在程序運(yùn)行時,可以使用內(nèi)存存儲數(shù)據(jù)。但是內(nèi)存中的數(shù)據(jù)在程序退出、斷電或計(jì)算機(jī)重啟后就全部清除。將數(shù)據(jù)存儲在內(nèi)存中,每次運(yùn)行程序都需要重新錄入信息。有實(shí)際意義的程序都需要永久保存數(shù)據(jù),那我們使用什么來永久性的存儲數(shù)據(jù)呢?答案就是使用文件什么是文件什么是文件?
文件可認(rèn)為是相關(guān)記錄或放在一起的數(shù)據(jù)的集合文件一般存儲在哪里?JAVA程序一般通過什么去訪問文件屬性?
JAVAAPI:java.io.File類File類的定義?File類表示磁盤上的文件或目錄。在Java中不管是文件還是目錄統(tǒng)一都用File類來表示。
什么是File類File類物理文件或目錄構(gòu)造文件對象操作文件或目錄的屬性(路徑、權(quán)限、日期和時間等
)
File類的常用方法File類的常用方法如下:方法名描述exists()判讀文件或目錄是否存在,存在返回true,否則返回falsecreateNewFile()創(chuàng)建文件isFile()判斷是否是文件,是文件返回trueisDirectory()判斷是否是目錄,是目錄返回truegetName()獲取文件或目錄名稱getPath()獲取文件或目錄的路徑getAbsolutePath()獲取文件或目錄的絕對路徑listFiles()獲取指定目錄下的所有文件,返回File[]的數(shù)組lastModified()獲取文件或目錄的最后修改日期length()獲取文件或目錄的大小,單位為字節(jié)importjava.io.File;……Filefile=newFile(args[0]);System.out.println("文件或目錄是否存在:"+file.exists());System.out.println("是文件嗎:"+file.isFile());System.out.println("是目錄嗎:"+file.isDirectory());System.out.println("名稱:"+file.getName());System.out.println("路徑:"+file.getPath());System.out.println("絕對路徑:"+file.getAbsolutePath());System.out.println("最后修改時間:"+file.lastModified());System.out.println(“文件大小:”+file.length()+“字節(jié)”);下面是一個設(shè)置與操作File類的實(shí)例,可以指定查詢某個目錄下的所有文件與目錄名稱。
如何使用File類導(dǎo)入File類判斷是目錄還是文件,和輸出一些常用信息Filef1=newFile("E:\\test");if(f1.exists()){ System.out.println("該文件夾已經(jīng)存在");}else{ f1.mkdir();}Filef2=newFile("E:\\test\\a.txt");f2.createNewFile();在java.io包中定義的File類是用于針對磁盤創(chuàng)建文件對象的。怎樣在Java中實(shí)現(xiàn)創(chuàng)建一個文件夾,并在這個文件夾中創(chuàng)建文件。比如想讓輸出的文件保持到一個原來沒有的文件夾下,示例如下:創(chuàng)建一個文件夾test和在該文件夾下創(chuàng)建一個a.txt文件。
創(chuàng)建文件對象在某特定目錄下創(chuàng)建文件創(chuàng)建test目錄小結(jié)1File類提供了與平臺無關(guān)的方法來對磁盤上的文件或目錄進(jìn)行操作。File類的實(shí)例是不可變的,也就是說,一旦創(chuàng)建,F(xiàn)ile對象表示的抽象路徑名將永不改變。File類提供一個抽象的、與系統(tǒng)獨(dú)立的路徑表示。給它一個路徑字符串,它會將其轉(zhuǎn)換為與系統(tǒng)無關(guān)的抽象路徑表示,這個路徑可以指向一個文件、目錄或是URI(UniformResourceIdentifier)。一個File類的實(shí)例被建立時,它就不能再被改變內(nèi)容。File類實(shí)例除了用作一個文件或目錄的抽象表示之外,它還提供了不少相關(guān)操作方法。可以用它來對文件系統(tǒng)做一些查詢與設(shè)置的動作。什么是流流是指一連串流動的字符,是以先進(jìn)先出方式發(fā)送信息的通道。InputStreamOutputStream來自數(shù)據(jù)源的數(shù)據(jù)流流向目的地的數(shù)據(jù)流AECDBF流
Java流的分類
字節(jié)流8位InputStreamOutputStream字符流16位UnicodeReaderWriter文本文件的讀寫寫文件操作用FileOutputStream字節(jié)輸出流寫文本文件用FileWriter字符輸出流寫文本文件讀文件操作用FileInputStream字節(jié)輸入流讀文本文件用FileReader字符輸入流讀文本文件在java.io包中定義的輸入、輸出流操作類都適合對磁盤文件內(nèi)容的讀寫操作。它們都可以通過綁定一個文件對象創(chuàng)建輸出流對象,可以直接指定磁盤文件名創(chuàng)建輸出流對象,通過輸入輸出流對象來實(shí)現(xiàn)文件的讀寫操作。importjava.io.*;……OutputStreamfos=newFileOutputStream("e:\\test\\a.txt");Stringstr="我是一個好學(xué)生";byte[]words=str.getBytes();fos.write(words,0,words.length);
fos.close();FileOutputStream是用于寫入字節(jié)數(shù)據(jù)流到文件中的類,繼承自O(shè)utputStream類,提供了最基礎(chǔ)的文件寫數(shù)據(jù)操作。向“e:\\test\\a.txt”文件里寫入“我是一個好學(xué)生”。
FileOutputStream類導(dǎo)入相關(guān)類構(gòu)造一個文件輸出流對象使用write()方法將數(shù)據(jù)寫入文件關(guān)閉文件輸出流FileWriter是用于寫入字符數(shù)據(jù)流到文件中的類,繼承自O(shè)utputStreamWriter類,方便創(chuàng)建字符流對象。FileWrite常用方法如下:
FileWriter類方法描述FileWrite(Filef)構(gòu)造方法,根據(jù)File創(chuàng)建FileWrite對象write(Stringval)將字符串寫入文件close()關(guān)閉文件寫入流importjava.io.*;……FileWriterfw=newFileWriter("e:\\test\\a.txt");BufferedWriterbw=newBufferedWriter(fw);bw.writer("我要認(rèn)真學(xué)習(xí)");bw.flush();fw.close();向“e:\\test\\a.txt”文件里寫入“我要認(rèn)真學(xué)習(xí)”。
示例導(dǎo)入相關(guān)類創(chuàng)建一個FileWriter對象清空bw對象和關(guān)閉fw對象創(chuàng)建一個BufferedWriter對象importjava.io.*;……OutputStreamfos=newFileOutputStream("e:\\test\\a.txt");Stringstr="我是一個好學(xué)生";byte[]words=str.getBytes();fos.write(words,0,words.length);
fos.close();FileOutputStream是用于從文件中讀取字節(jié)數(shù)據(jù)流的類,提供了最基礎(chǔ)的文件讀取數(shù)據(jù)操作。從“e:\\test\\a.txt”文件里取出數(shù)據(jù)。
FileInputStream類導(dǎo)入相關(guān)類構(gòu)造一個文件輸出流對象使用write()方法將數(shù)據(jù)寫入文件關(guān)閉文件輸出流FileReader是用于從文件中讀取字符數(shù)據(jù)流的類,繼承自InputStreamReader類,方便創(chuàng)建字符流對象。FileReader常用方法如下:
FileReader類方法名作用FileReader(Filef)根據(jù)File創(chuàng)建FileReader對象用于讀取文本文件close()關(guān)閉FileReaderimportjava.io.*;……FileWriterfw=newFileWriter("e:\\test\\a.txt");BufferedWriterbw=newBufferedWriter(fw);bw.writer("我要認(rèn)真學(xué)習(xí)");bw.flush();fw.close();從“e:\\test\\a.txt”文件里讀取數(shù)據(jù)。
示例導(dǎo)入相關(guān)類創(chuàng)建一個FileWriter對象清空bw對象和關(guān)閉fw對象創(chuàng)建一個BufferedWriter對象小結(jié)2寫文本文件操作的一般步驟:構(gòu)造一個文件輸出流對象利用文件輸出流的方法寫文本文件關(guān)閉文件輸出流讀文本文件操作的一般步驟:構(gòu)造一個文件輸出流對象根據(jù)文件路徑創(chuàng)建輸入流讀取數(shù)據(jù)關(guān)閉文件輸入流二進(jìn)制文件的讀寫為什么要讀寫二進(jìn)制文件?有時需要存儲一個對象的成員數(shù)據(jù),而不是整個對象的信息,成員數(shù)據(jù)的類型假設(shè)都是Java的基本數(shù)據(jù)類型,這樣的需求不必使用Object輸入或取出數(shù)據(jù)。寫二進(jìn)制文件操作用DataOutputStream寫二進(jìn)制文件讀二進(jìn)制文件操作用DataInputStream讀二進(jìn)制文件
如何使用DataInputStream與DataOutputStream讀寫二進(jìn)制文件。
1、創(chuàng)建一個Member類。2、將Member類實(shí)例的成員數(shù)據(jù)寫入E:\\a.txt文件中。3、在讀入文件數(shù)據(jù)后,將這些數(shù)據(jù)還原為Member對象。
二進(jìn)制文件讀寫示例publicclassMember{ privateStringname; privateintage;
publicMember(){ } publicMember(Stringname,intage){ =name; this.age=age; }……生成getter和setter方法}成員屬性Member[]members={newMember("張三",90),newMember("李四",95),newMember("王五",88)}; StringfileName="E:\\a.txt";DataOutputStreamdataOutputStream=newDataOutputStream(newFileOutputStream(fileName));for(Membermember:members){ //寫入U(xiǎn)TF字符串 dataOutputStream.writeUTF(member.getName()); //寫入int數(shù)據(jù) dataOutputStream.writeInt(member.getAge());}//寫入所有數(shù)據(jù)至目標(biāo)文件dataOutputStream.flush();//關(guān)閉流dataOutputStream.close();創(chuàng)建流對象寫入數(shù)據(jù)DataInputStreamdataInputStream=newDataInputStream(newFileInputStream(fileName));for(inti=0;i<members.length;i++){ //讀出UTF字符串 Stringname=dataInputStream.readUTF(); //讀出int數(shù)據(jù) intscore=dataInputStream.readInt(); members[i]=newMember(name,score);}dataInputStream.close();//關(guān)閉流//顯示還原后的數(shù)據(jù)for(inti=0;i<members.length;i++){ Membermember=(Member)members[i]; System.out.println(member.getName()+""+member.getAge());}讀二進(jìn)制文件對象讀出數(shù)據(jù)二進(jìn)制文件讀寫示例運(yùn)行效果如:
輸出結(jié)果為:張三90李四95王五88在從文件中讀出數(shù)據(jù)時,不用費(fèi)心地自行判斷讀入字符串時或讀入int類型時何時該停止,使用對應(yīng)的readUTF()或readInt()方法就可以正確地讀入完整類型數(shù)據(jù)。對象的序列化與反序列化為什么需要對象的序列化與反序列化?在Java程序的執(zhí)行過程中,很多數(shù)據(jù)都是以對象的方式存在于內(nèi)存中。有時會希望直接將內(nèi)存中整個對象存儲至文件,而不是只存儲對象中的某些基本類型成員信息。而在下一次運(yùn)行程序時,希望可以從文件中讀出數(shù)據(jù)并還原為對象。什么是對象的序列化和反序列化?對象的序列化是指把對象寫到一個輸出流中,對象的反序列化是指從一個輸入流中讀取一個對象。
對象序列化的作用及方法對象的序列化主要有以下幾種用途:把對象的字節(jié)序列永久地保存到硬盤上,通常存放在一個文件中。在網(wǎng)絡(luò)上傳送對象的字節(jié)序列。java.io.ObjectOutputStream代表對象輸出流,它的writeObject(Objectobj)方法可對參數(shù)指定的obj對象進(jìn)行序列化,把得到的字節(jié)序列寫到一個目標(biāo)輸出流中。java.io.ObjectOutputStream代表對象輸入流,它的readObject()方法從一個源輸入流中讀取字節(jié)序列,再把它們反序列化為一個對象,并將其返回。
如何實(shí)現(xiàn)對象序列化與反序列化對象序列化包括如下步驟:創(chuàng)建一個對象輸出流,它可以包裝一個其他類型的目標(biāo)輸出流,如文件輸出流;通過對象輸出流的writeObject()方法寫對象。對象反序列化的步驟如下:創(chuàng)建一個對象輸入流,它可以包裝一個其他類型的源輸入流,如文件輸入流;通過對象輸入流的readObject()方法讀取對象。
只有實(shí)現(xiàn)了Serializable接口的類的對象才能被序列化。name=成龍,age=50將一個對象寫入文本文件中,并讀取出來。 1、創(chuàng)建一個學(xué)生對象 2、序列化對象與反序列化對象運(yùn)行效果如:
示例
//一個學(xué)生對象classStudentimplementsSerializable{privateStringname;privateintage;
publicStudent(Stringname,intage){=name;this.age=age;}}必須實(shí)現(xiàn)序列化……ObjectOutputStreamout=newObjectOutputStream(newFileOutputStream("e:\\objectFile.txt"));
//序列化對象
Studentstu=newStudent("成龍",50);out.writeObject(stu);out.close();
//反序列化對象
ObjectInputStreamin=newObjectInputStream(newFileInputStream("e:\\objectFile.txt"));Studentstu1=(Student)in.readObject();
System.out.println(stu1);//關(guān)閉流
in.close();創(chuàng)建序列化對象流反序列化對象序列化對象序列化版本號每個類的對象在序列化的時候,JAVA虛擬機(jī)會自動根據(jù)類中的屬性和方法計(jì)算出一個序列化版本號。(也就是說:如果類中的屬性和方法改變了,那么算出的版本號也會改變)。當(dāng)反序列化時,JAVA虛擬機(jī)會判斷流中的對象的序列化版本號與你的類的版本號是否一致,如果不一致,會發(fā)生InvalidClassException無效的類異常。所以如果一個類要保持一個序列化版本號,必須聲明。privatestaticfinallongserialVersionUID=100L;小結(jié)3-1序列化的步驟如下:反序列化的步驟如下:ObjectOutputStreamFileOutputStream文
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度學(xué)生傷害賠償協(xié)議書(校園意外)
- 二零二五年度道路運(yùn)輸企業(yè)司機(jī)薪酬管理合同
- 2025年度物業(yè)保潔項(xiàng)目管理勞動合同
- 二零二五年度業(yè)主委員會與物業(yè)服務(wù)社區(qū)停車管理合同
- 2025年度門面房出租與租賃合同爭議解決協(xié)議
- 典當(dāng)與拍賣服務(wù)作業(yè)指導(dǎo)書
- 2025年IT服務(wù)管理培訓(xùn)課件
- 二手住房出售協(xié)議
- 網(wǎng)絡(luò)直播行業(yè)主播言論免責(zé)協(xié)議
- 客戶關(guān)系管理軟件開發(fā)外包合同書
- 中建混凝土工程專項(xiàng)施工方案
- 機(jī)電一體化(專業(yè)畢業(yè)論文)
- 小學(xué)2年級心理健康教育課件《智斗“攔路虎”-人人都會有困難》
- 2024年新疆區(qū)公務(wù)員錄用考試《行測》真題及答案解析
- 焊工(初級)考試題庫及答案
- 2024年云南省中考物理試題含答案
- 感染科質(zhì)控中心工作匯報(bào)
- Module1Unit1Welivedinasmallhouse (教案) 英語五年級下冊
- 期末試卷(試題)-2024-2025學(xué)年滬教版三年級上冊數(shù)學(xué)
- 風(fēng)險(xiǎn)評估報(bào)告模板
- 合肥市2024年中考理化生實(shí)驗(yàn)評分細(xì)則
評論
0/150
提交評論