已閱讀5頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章 流和文件,內(nèi)容提要: 流概述 基本輸入和輸出流 標(biāo)準(zhǔn)輸入和輸出 文件處理 緩沖區(qū)輸入和輸出流 格式字節(jié)數(shù)據(jù)流,6.1流概述,為進(jìn)行數(shù)據(jù)的輸入/輸出操作,Java中把不同的輸入/輸出源(鍵盤、文件、網(wǎng)絡(luò)連接等)抽象表述為“流”(stream)。 java.io包中定義了多個(gè)流類型(類或抽象類)來(lái)實(shí)現(xiàn)輸入/輸出功能 . 在Java 1.1之前,java.io包中的流只有普通的字節(jié)流,以byte為基本處理單位 . Java 1.1開始,在java.io包中加入了專門處理字符流的類,使Java語(yǔ)言對(duì)字符流的處理更加方便和有效。,基本的I/O數(shù)據(jù)流,按照功能劃分為兩種基本的流:輸入流和輸出流 輸入流: 只能從中讀取數(shù)據(jù),而不能向其寫出數(shù)據(jù) 輸出流: 只能向其寫出數(shù)據(jù),而不能從中讀取數(shù)據(jù) 輸入和輸出流可以被連接到文件、網(wǎng)絡(luò)套接字或內(nèi)存緩沖區(qū)。,字符流和字節(jié)流,按處理數(shù)據(jù)的單位劃分,Java支持兩 種基本的流類型: 字符流和字節(jié)流,節(jié)點(diǎn)流和處理流,節(jié)點(diǎn)流: 可以從/向一個(gè)特定的地方(節(jié)點(diǎn))讀寫數(shù)據(jù),例如磁盤或者一塊內(nèi)存。 處理流: 是對(duì)一個(gè)已存在的流的連接和封裝,通過所封裝的流的功能調(diào)用實(shí)現(xiàn)數(shù)據(jù)讀/寫功能。,節(jié)點(diǎn)流和處理流,節(jié)點(diǎn)流類型(Node Streams),處理流(Processing Streams),InputStream類提供的方法,三個(gè)基本的read方法: int read() int read(byte buffer) int read(byte buffer, int offset, int length) 其它方法: void close() int available() skip(long n) boolean markSupported() void mark(int readlimit) void reset(),OutputStream類提供的方法,三個(gè)基本的write方法: void write(int c) void write(byte buffer) void write(byte buffer, int offset, int length) 其它方法 void close() void flush(),Reader類提供的方法,三個(gè)基本的read方法: int read() int read(char cbuf) int read(char cbuf, int offset, int length) 其它方法 void close() boolean ready() skip(long n) boolean markSupported() void mark(int readAheadLimit) void reset(),Writer類提供的方法,三個(gè)基本的write方法: void write(int c) void write(char cbuf) void write(char cbuf, int offset, int length) void write(String string) void write(String string, int offset, int length) 其它方法 void close() void flush(),節(jié)點(diǎn)流應(yīng)用舉例-文件復(fù)制,import java.io.*; public class Test1 public static void main(String args) try FileReader input = new FileReader(“Test1.java“); FileWriter output = new FileWriter(“temp.txt“); int read = input.read(); while ( read != -1 ) output.write(read); read = input.read(); input.close(); output.close(); catch (IOException e) System.out.println(e); ,例題6-1:寫一個(gè)程序,實(shí)現(xiàn)任意類型文件的復(fù)制。,6.3標(biāo)準(zhǔn)輸入和輸出,System.in 提供從“標(biāo)準(zhǔn)輸入”讀入數(shù)據(jù)的功能 System.in 為InputStream類型. System.out 提供向“標(biāo)準(zhǔn)輸出”寫出數(shù)據(jù)的功能 System.out為 PrintStream類型.,向標(biāo)準(zhǔn)輸出寫出數(shù)據(jù),System.out的println/print方法 println方法可將方法參數(shù)輸出并換行 print方法將方法參數(shù)輸出但不換行 print和println方法針對(duì)多數(shù)數(shù)據(jù)類型進(jìn)行了重寫 (boolean, char, int, long, float, double以及char, Object和 String). print(Object)和println(Object)方法中調(diào)用了參數(shù)的toString()方法,再將生成的字符串輸出,從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),/標(biāo)準(zhǔn)輸入輸出字符處理 import java.io.*; public class StandIO1 public static void main(String args) char inChar; System.out.println(“請(qǐng)輸入一個(gè)字符: “); try inChar = (char) System.in.read ( ); /從鍵盤讀入數(shù)據(jù)(字符) System.out.println(“輸入的字符是:“+ inChar); catch (IOException e) System.out.println(e); ,0903,從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),/標(biāo)準(zhǔn)輸入輸出字符處理 (JDK5.0以上) import java.io.*; public class StandIO2 public static void main(String args) int inInt; System.out.println(“請(qǐng)輸入一個(gè)數(shù)字: “); try Scanner in = new Scanner(System.in); inInt = in.nextInt ( ); /從鍵盤讀入數(shù)據(jù)(數(shù)字) System.out.println(“輸入的字符是:“+ inInt); catch (IOException e) System.out.println(e); ,0903,6.4文件處理,java.io包中定義與數(shù)據(jù)輸入、輸出功能有關(guān)的類,包括提供文件操作功能的File類 創(chuàng)建File類對(duì)象 File f; f = new File(“Test.java“); f=new File(“F:/ok/HelloWorld.class”) 在Java中,將目錄也當(dāng)作文件處理File類中提供了實(shí)現(xiàn)目錄管理功能的方法 File p=new File(“F:/ok/“); File f=new File(p,“HelloWorld.class“);,File類方法介紹,關(guān)于文件/目錄名操作 String getName() String getPath() String getAbsolutePath() String getParent() boolean renameTo(File newName) File 測(cè)試操作 boolean exists() boolean canWrite() boolean canRead() boolean isFile() boolean isDirectory() boolean isAbsolute();,獲取常規(guī)文件信息操作 long lastModified() long length() boolean delete() 目錄操作 boolean mkdir() String list(),File類對(duì)象案例,結(jié)合命令行參數(shù)的使用,練習(xí)從已經(jīng)存在的文件中讀入數(shù)據(jù)并顯示的過程; 結(jié)合命令行參數(shù)的使用,練習(xí)從標(biāo)準(zhǔn)輸入中讀入數(shù)據(jù)并將數(shù)據(jù)寫到文件中的過程; 例題6-2:將練習(xí)6-1改成從File對(duì)象輸入和輸出數(shù)據(jù)。,例題6-3:寫一個(gè)程序,列出指定文件夾下的文件及子文件夾的名稱、最后修改時(shí)間及文件大小,文件夾路徑從命令行輸入。,6.4.2 文件過濾,文件過濾就是對(duì)文件名的過濾,即將符合條件的文件選擇出來(lái)進(jìn)行操作。 接口FileFilter和FilenameFilter來(lái)實(shí)現(xiàn)這一功能。 要想實(shí)現(xiàn)過濾功能,就要聲明一個(gè)類實(shí)現(xiàn)FileFilter和FilenameFilter接口中的accept()的方法,這個(gè)類常??梢苑Q為過濾器 .,兩個(gè)接口中只有方法accept(),public interface FileFilter boolean accept(File pathname); 參數(shù)pathname是要過濾目錄中的文件對(duì)象。 public interface FilenameFilter boolean accept(File dir, String name); 參數(shù)dir是要過濾的目錄,name是目錄中的文件名。,例題6-4:寫一個(gè)程序,列出指定文件夾及其所有子文件夾下所有Java源文件的完整路徑,文件夾路徑從命令行輸入。,6.4.3 FileInputStream/ FileOutputStream類,使用File類可以建立與磁盤文件的連接;讀取磁盤文件的相關(guān)屬性和對(duì)磁盤文件進(jìn)行管理性操作, 使用File類不能完成對(duì)磁盤文件數(shù)據(jù)的讀寫操作。 FileInputStream/ FileOutputStream類可以用來(lái)實(shí)現(xiàn)對(duì)字節(jié)流文件的I/O處理 ,通過它提供的方法打開本地主機(jī)上的文件,并進(jìn)行順序的讀寫。,FileInputStream類,FileInputStream (String FileName); /利用文件名(包括路徑名)字符串創(chuàng)建從該文件讀取數(shù)據(jù)的輸入流 FileInputStream (File f); /利用已經(jīng)存在的File類對(duì)象創(chuàng)建從該對(duì)象所對(duì)應(yīng)的文件中讀取數(shù)據(jù)的輸入流 FileInputStream (FileDescriptor fdObj); /利用文件描述符創(chuàng)建從該對(duì)象所對(duì)應(yīng)的文件中讀取數(shù)據(jù)的輸入流,FileInputStream類,讀入數(shù)據(jù)有兩種方式 : 利用FileInputStream類提供的read方法 以FileInputStream類對(duì)象為原始數(shù)據(jù)源,再套上其它功能強(qiáng)大的輸入流,FileOutputStream類,FileOutputStream (String FileName); /利用文件名(包括路徑名)字符串創(chuàng)建從該文件讀取數(shù)據(jù)的輸入流 FileOutputStream (File f); /利用已經(jīng)存在的File類對(duì)象創(chuàng)建從該對(duì)象所對(duì)應(yīng)的文件中讀取數(shù)據(jù)的輸入流 FileOutputStream (FileDescriptor fdObj); /利用文件描述符創(chuàng)建從該對(duì)象所對(duì)應(yīng)的文件中讀取數(shù)據(jù)的輸入流 FileOutputStream (String FileName,boolean append); /利用文件名(包括路徑名)字符串創(chuàng)建從該文件讀取數(shù)據(jù)的輸入流,FileOutputStream類,向文件寫入數(shù)據(jù)有兩種方式 : 利用FileOutputStream類提供的write方法來(lái)完成 以FileOutputStream類對(duì)象為原始數(shù)據(jù)源,再套上其它功能強(qiáng)大的輸入流,文件數(shù)據(jù)的輸入和輸出舉例,import java.io.*; public class FileIOTest1 public static void main(String args) int count; byte buf=new byte2056; try FileInputStream fileIn; FileOutputStream fileOut; fileIn=new FileInputStream(“c:qqRead.txt“); count=fileIn.read(buf); /從輸入流fileIn讀入數(shù)據(jù)到緩沖區(qū) fileOut=new FileOutputStream(“c:qqCopyMe.txt“);,續(xù),fileOut.write(buf,0,count); /從緩沖區(qū)把數(shù)據(jù)寫入到輸出流 /把文件FileIOTest1.txt中的內(nèi)容顯示出來(lái) fileIn=new FileInputStream(“c:qqCopyMe.txt“); count=fileIn.read(buf); String str=new String(buf,0,count); System.out.println(str); catch(IOException e) System.out.println(e.toString(); ,6.4.3 RandomAcessFile類,RandomAcessFile類直接繼承于Object ; 使用 RandomAcessFile類,用戶可以對(duì)文件進(jìn)行任何所希望的操作。,RandomAcessFile類方法,RandomAcessFile (String filename,String mode); /利用文件名(包括路徑名)字符串filename創(chuàng)建RandomAcessFile類對(duì)象,并指定文件的操作模式mode(r為讀模式,rw為讀寫模式) RandomAcessFile (File f, String mode); /利用已經(jīng)存在的File類對(duì)象f創(chuàng)建RandomAcessFile類對(duì)象,并指定文件的操作模式mode(r為讀模式,rw為讀寫模式)。 RandomAcessFile類提供了大量的讀寫文件的方法。,例題6-5:從磁盤讀入一個(gè)文本文件,將其中下標(biāo)為奇數(shù)的(第1, 3, 5.個(gè))字符改為A。,6.4.4 FileReader/FileWriter類,FileReader類以字符為單位從文件中讀入數(shù)據(jù); FileWriter類以字符為單位向文件中寫出數(shù)據(jù); 這兩個(gè)類的構(gòu)造函數(shù)中以String或File類型參數(shù)指定要讀寫的文件。,FileReader/FileWriter類方法,FileReader (String FileName); /利用文件名(包括路徑名)字符串創(chuàng)建從該文件讀取數(shù)據(jù)的輸入流 FileReader (File f); /利用已經(jīng)存在的File類對(duì)象創(chuàng)建從該對(duì)象所對(duì)應(yīng)的文件中讀取數(shù)據(jù)的輸入流 FileWriter (String FileName); / FileWriter (File f); / FileWriter (String FileName,boolean append); /利用文件名(包括路徑名)字符串創(chuàng)建從該文件讀取數(shù)據(jù)的輸入流,,6.5緩沖區(qū)輸入和輸出流,輸入流FileReader和輸出流FileWriter雖然可以方便地完成輸入和輸出操作; 對(duì)輸入和輸出有較快的時(shí)間要求時(shí) ,使用緩沖流類在內(nèi)存中建立緩沖區(qū) .,6.5.1 BufferedReader類,BufferedReader類方法如下: public BufferedReader(Reader in); public BufferedReader(Reader in, int size) /參數(shù)in是超類Reader的對(duì)象,size是用戶設(shè)定的緩沖區(qū)大小。 public String readLine() throw IOException; /從文件中讀取一行字符,6.5.2 BufferedWriter類,BufferedWriter構(gòu)造方法如下 public BufferedWriter (Writer out); public BufferedWriter (Writer out, int size); 參數(shù)out是超類Writer的對(duì)象,size是用戶設(shè)定的緩沖區(qū)大小。 BufferedWriter類除從超類中繼承的方法外,還有常用方法: public void newLine() throw IOException; /用于寫入行分割符,例題6-6:復(fù)制一個(gè)文件,比較一下帶緩沖區(qū)和不帶緩沖區(qū)讀寫文件的效率有何區(qū)別。,6.6 格式字節(jié)數(shù)據(jù)流,DataInputStream類和 DataOutputStream類創(chuàng)建的對(duì)象被稱為數(shù)據(jù)輸入流和數(shù)據(jù)輸出流; 數(shù)據(jù)輸入流和數(shù)據(jù)輸出流允許程序按照與機(jī)器無(wú)關(guān)的風(fēng)格讀取Java的原始數(shù)據(jù)類型; 即格式數(shù)據(jù)流在讀取數(shù)據(jù)時(shí)無(wú)須關(guān)心數(shù)據(jù)類型占多少字節(jié),可以讀取任意一種基本數(shù)據(jù)類型的變量,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)安全你我他主題班會(huì)
- 二零二五年度城市中心個(gè)人住宅帶車位買賣合同3篇
- 0718特種設(shè)備安全監(jiān)察-法規(guī)體系-第五期局長(zhǎng)班-北京
- 二零二五年度鋼構(gòu)材料智能制造與供應(yīng)鏈管理合同2篇
- 管理學(xué)知到智慧樹章節(jié)測(cè)試課后答案2024年秋新疆理工學(xué)院
- 二零二五年度婚紗攝影居間服務(wù)合同模板3篇
- 二零二五版生豬養(yǎng)殖基地與肉類加工企業(yè)銷售合同3篇
- 二零二五年度商業(yè)銀行信用證抵押貸款合同樣本2篇
- 金昌水泥耐磨地坪施工方案
- 二零二五版圖書庫(kù)存管理及調(diào)撥合同3篇
- 新能源發(fā)電項(xiàng)目合作開發(fā)協(xié)議
- 2025年上半年潞安化工集團(tuán)限公司高校畢業(yè)生招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2024年鐵嶺衛(wèi)生職業(yè)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
- 電線電纜加工質(zhì)量控制流程
- 山東省淄博市張店區(qū)祥瑞園小學(xué)?-2024-2025年第一學(xué)期一年級(jí)班主任經(jīng)驗(yàn)分享(著眼于愛 著手于細(xì))【課件】
- 企業(yè)內(nèi)部客供物料管理辦法
- 大數(shù)據(jù)與人工智能ppt
- 人教版八年級(jí)下冊(cè)第一單元英語(yǔ)Unit1 單元設(shè)計(jì)
- GB/T 9109.5-2017石油和液體石油產(chǎn)品動(dòng)態(tài)計(jì)量第5部分:油量計(jì)算
- 邀請(qǐng)函模板完整
- 2023年江蘇省南京市中考化學(xué)試卷2
評(píng)論
0/150
提交評(píng)論