




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第6章 流和文件 內(nèi)容提要內(nèi)容提要:流概述基本輸入和輸出流標(biāo)準(zhǔn)輸入和輸出文件處理緩沖區(qū)輸入和輸出流格式字節(jié)數(shù)據(jù)流2022年年4月月22日星期五日星期五6.1流概述為進(jìn)行數(shù)據(jù)的輸入/輸出操作,Java中把不同的輸入/輸出源(鍵盤(pán)、文件、網(wǎng)絡(luò)連接等)抽象表述為“流”(stream)。java.io包中定義了多個(gè)流類(lèi)型(類(lèi)或抽象類(lèi))來(lái)實(shí)現(xiàn)輸入/輸出功能 .在Java 1.1之前,java.io包中的流只有普通的字節(jié)流,以byte為基本處理單位 .Java 1.1開(kāi)始,在java.io包中加入了專(zhuān)門(mén)處理字符流的類(lèi),使Java語(yǔ)言對(duì)字符流的處理更加方便和有效。 2022年年4月月22日星期五日星期五基本
2、的I/O數(shù)據(jù)流按照功能劃分為兩種基本的流:輸入流和輸出流n輸入流: 只能從中讀取數(shù)據(jù),而不能向其寫(xiě)出數(shù)據(jù)n輸出流: 只能向其寫(xiě)出數(shù)據(jù),而不能從中讀取數(shù)據(jù)n輸入和輸出流可以被連接到文件、網(wǎng)絡(luò)套接字或內(nèi)存緩沖區(qū)。 2022年年4月月22日星期五日星期五字符流和字節(jié)流按處理數(shù)據(jù)的單位劃分,Java支持兩 種基本的流類(lèi)型: 字符流和字節(jié)流字節(jié)流字節(jié)流字符流字符流輸入InputStreamReader輸出OutputStreamWriter2022年年4月月22日星期五日星期五節(jié)點(diǎn)流和處理流 節(jié)點(diǎn)流: 可以從/向一個(gè)特定的地方(節(jié)點(diǎn))讀寫(xiě)數(shù)據(jù),例如磁盤(pán)或者一塊內(nèi)存。 處理流: 是對(duì)一個(gè)已存在的流的連接和
3、封裝,通過(guò)所封裝的流的功能調(diào)用實(shí)現(xiàn)數(shù)據(jù)讀/寫(xiě)功能。2022年年4月月22日星期五日星期五節(jié)點(diǎn)流和處理流2022年年4月月22日星期五日星期五節(jié)點(diǎn)流類(lèi)型(Node Streams)類(lèi)類(lèi) 型型 字字 符符 流流字字 節(jié)節(jié) 流流FileFileReaderFileWriterFileInputStreamFileOutputStreamMemory ArrayCharArrayReaderCharArrayWriterByteArrayInputStreamByteArrayOutputStreamMemory StringStringReaderStringWriterPipePipedReade
4、rPipedWriterPipedInputStreamPipedOutputStream2022年年4月月22日星期五日星期五處理流(Processing Streams)處理類(lèi)型 字 符 流字 節(jié) 流 BufferingBufferedReaderBufferedWriterBufferedInputStreamBufferedOutputStreamFilteringFilterReaderFilterWriterFilterInputStreamFilterOutputStreamConverting between bytes and characterInputStreamRead
5、erOutputStreamWriterObject SerializationObjectInputStreamObjectOutputStreamData conversionDataInputStreamDataOutputStreamCountingLineNumberReaderLineNumberInputStreamPeeking aheadPusbackReaderPushbackInputStreamPintingPrintWriterPrintStream2022年年4月月22日星期五日星期五InputStream類(lèi)提供的方法 三個(gè)基本的read方法:int read()i
6、nt 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()2022年年4月月22日星期五日星期五OutputStream類(lèi)提供的方法 三個(gè)基本的write方法:void write(int c)void write(byte buffer)void write(byte buffer, int offset, int
7、length) 其它方法void close()void flush()2022年年4月月22日星期五日星期五Reader類(lèi)提供的方法 三個(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()2022年年4月月22日星期五日星期五Writer類(lèi)提供的方法 三個(gè)基本的wri
8、te方法: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()2022年年4月月22日星期五日星期五節(jié)點(diǎn)流應(yīng)用舉例-文件復(fù)制 import java.io.*; public class Test1 public static void main(String args) try
9、 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); 2022年年4月月22日星期五日星期五n例題6-1:寫(xiě)一個(gè)程序,實(shí)現(xiàn)任意類(lèi)型文件的復(fù)制。
10、2022年年4月月22日星期五日星期五6.3標(biāo)準(zhǔn)輸入和輸出 System.in 提供從“標(biāo)準(zhǔn)輸入”讀入數(shù)據(jù)的功能System.in 為InputStream類(lèi)型.System.out 提供向“標(biāo)準(zhǔn)輸出”寫(xiě)出數(shù)據(jù)的功能System.out為 PrintStream類(lèi)型.2022年年4月月22日星期五日星期五向標(biāo)準(zhǔn)輸出寫(xiě)出數(shù)據(jù)System.out的println/print方法println方法可將方法參數(shù)輸出并換行 print方法將方法參數(shù)輸出但不換行print和println方法針對(duì)多數(shù)數(shù)據(jù)類(lèi)型進(jìn)行了重寫(xiě) (boolean, char, int, long, float, double以及ch
11、ar, Object和 String).print(Object)和println(Object)方法中調(diào)用了參數(shù)的toString()方法,再將生成的字符串輸出2022年年4月月22日星期五日星期五從標(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 ( ); /從鍵盤(pán)讀入數(shù)據(jù)(字符) System
12、.out.println(輸入的字符是:+ inChar); catch (IOException e) System.out.println(e); 09032022年年4月月22日星期五日星期五從標(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
13、.nextInt ( ); /從鍵盤(pán)讀入數(shù)據(jù)(數(shù)字) System.out.println(輸入的字符是:+ inInt); catch (IOException e) System.out.println(e); 09032022年年4月月22日星期五日星期五6.4文件處理java.io包中定義與數(shù)據(jù)輸入、輸出功能有關(guān)的類(lèi),包括提供文件操作功能的File類(lèi)創(chuàng)建File類(lèi)對(duì)象File f;f = new File(Test.java);f=new File(“F:/ok/HelloWorld.class”)在Java中,將目錄也當(dāng)作文件處理File類(lèi)中提供了實(shí)現(xiàn)目錄管理功能的方法File p=
14、new File(F:/ok/); File f=new File(p,HelloWorld.class); 2022年年4月月22日星期五日星期五File類(lèi)方法介紹 關(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 isDirec
15、tory() boolean isAbsolute(); 獲取常規(guī)文件信息操作 long lastModified() long length() boolean delete() 目錄操作 boolean mkdir() String list()2022年年4月月22日星期五日星期五File類(lèi)對(duì)象案例1.結(jié)合命令行參數(shù)的使用,練習(xí)從已經(jīng)存在的文件中讀入數(shù)據(jù)并顯示的過(guò)程;2.結(jié)合命令行參數(shù)的使用,練習(xí)從標(biāo)準(zhǔn)輸入中讀入數(shù)據(jù)并將數(shù)據(jù)寫(xiě)到文件中的過(guò)程;n例題6-2:將練習(xí)6-1改成從File對(duì)象輸入和輸出數(shù)據(jù)。2022年年4月月22日星期五日星期五n例題6-3:寫(xiě)一個(gè)程序,列出指定文件夾下的文件及
16、子文件夾的名稱、最后修改時(shí)間及文件大小,文件夾路徑從命令行輸入。2022年年4月月22日星期五日星期五6.4.2 文件過(guò)濾n文件過(guò)濾就是對(duì)文件名的過(guò)濾,即將符合條件的文件選擇出來(lái)進(jìn)行操作。 n接口FileFilter和FilenameFilter來(lái)實(shí)現(xiàn)這一功能。n要想實(shí)現(xiàn)過(guò)濾功能,就要聲明一個(gè)類(lèi)實(shí)現(xiàn)FileFilter和FilenameFilter接口中的accept()的方法,這個(gè)類(lèi)常常可以稱為過(guò)濾器 .2022年年4月月22日星期五日星期五兩個(gè)接口中只有方法accept()public interface FileFilter boolean accept(File pathname);參
17、數(shù)pathname是要過(guò)濾目錄中的文件對(duì)象。public interface FilenameFilter boolean accept(File dir, String name); 參數(shù)dir是要過(guò)濾的目錄,name是目錄中的文件名。 2022年年4月月22日星期五日星期五n例題6-4:寫(xiě)一個(gè)程序,列出指定文件夾及其所有子文件夾下所有Java源文件的完整路徑,文件夾路徑從命令行輸入。2022年年4月月22日星期五日星期五6.4.3 FileInputStream/ FileOutputStream類(lèi)n 使用File類(lèi)可以建立與磁盤(pán)文件的連接;讀取磁盤(pán)文件的相關(guān)屬性和對(duì)磁盤(pán)文件進(jìn)行管理性操作
18、,n 使用File類(lèi)不能完成對(duì)磁盤(pán)文件數(shù)據(jù)的讀寫(xiě)操作。n FileInputStream/ FileOutputStream類(lèi)可以用來(lái)實(shí)現(xiàn)對(duì)字節(jié)流文件的I/O處理 ,通過(guò)它提供的方法打開(kāi)本地主機(jī)上的文件,并進(jìn)行順序的讀寫(xiě)。2022年年4月月22日星期五日星期五FileInputStream類(lèi)FileInputStream (String FileName); /利用文件名(包括路徑名)字符串創(chuàng)建從該文件讀取數(shù)據(jù)的輸入流FileInputStream (File f); /利用已經(jīng)存在的File類(lèi)對(duì)象創(chuàng)建從該對(duì)象所對(duì)應(yīng)的文件中讀取數(shù)據(jù)的輸入流FileInputStream (FileDescri
19、ptor fdObj); /利用文件描述符創(chuàng)建從該對(duì)象所對(duì)應(yīng)的文件中讀取數(shù)據(jù)的輸入流2022年年4月月22日星期五日星期五FileInputStream類(lèi)讀入數(shù)據(jù)有兩種方式 :利用FileInputStream類(lèi)提供的read方法 以FileInputStream類(lèi)對(duì)象為原始數(shù)據(jù)源,再套上其它功能強(qiáng)大的輸入流 2022年年4月月22日星期五日星期五FileOutputStream類(lèi)FileOutputStream (String FileName); /利用文件名(包括路徑名)字符串創(chuàng)建從該文件讀取數(shù)據(jù)的輸入流FileOutputStream (File f); /利用已經(jīng)存在的File類(lèi)對(duì)象
20、創(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ù)的輸入流 2022年年4月月22日星期五日星期五FileOutputStream類(lèi)向文件寫(xiě)入數(shù)據(jù)有兩種方式 :利用FileOutputStream類(lèi)提供的write方法來(lái)完成 以FileOutputStream類(lèi)對(duì)象為原始數(shù)據(jù)源,再套上其它功能強(qiáng)大的輸入流 202
21、2年年4月月22日星期五日星期五文件數(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 FileOut
22、putStream(c:qqCopyMe.txt); 2022年年4月月22日星期五日星期五續(xù) fileOut.write(buf,0,count); /從緩沖區(qū)把數(shù)據(jù)寫(xiě)入到輸出流 /把文件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()
23、; 2022年年4月月22日星期五日星期五6.4.3 RandomAcessFile類(lèi)RandomAcessFile類(lèi)直接繼承于Object ;使用 RandomAcessFile類(lèi),用戶可以對(duì)文件進(jìn)行任何所希望的操作。2022年年4月月22日星期五日星期五RandomAcessFile類(lèi)方法RandomAcessFile (String filename,String mode); /利用文件 名 ( 包 括 路 徑 名 ) 字 符 串 f i l e n a m e 創(chuàng) 建RandomAcessFile類(lèi)對(duì)象,并指定文件的操作模式mode(r為讀模式,rw為讀寫(xiě)模式) RandomAces
24、sFile (File f, String mode); /利用已經(jīng)存在的File類(lèi)對(duì)象f創(chuàng)建RandomAcessFile類(lèi)對(duì)象,并指定文件的操作模式mode(r為讀模式,rw為讀寫(xiě)模式)。 RandomAcessFile類(lèi)提供了大量的讀寫(xiě)文件的方法。2022年年4月月22日星期五日星期五n例題6-5:從磁盤(pán)讀入一個(gè)文本文件,將其中下標(biāo)為奇數(shù)的(第1, 3, 5.個(gè))字符改為A。2022年年4月月22日星期五日星期五6.4.4 FileReader/FileWriter類(lèi)FileReader類(lèi)以字符為單位從文件中讀入數(shù)據(jù);FileWriter類(lèi)以字符為單位向文件中寫(xiě)出數(shù)據(jù);這兩個(gè)類(lèi)的構(gòu)造函數(shù)
25、中以String或File類(lèi)型參數(shù)指定要讀寫(xiě)的文件。 2022年年4月月22日星期五日星期五FileReader/FileWriter類(lèi)方法FileReader (String FileName); /利用文件名(包括路徑名)字符串創(chuàng)建從該文件讀取數(shù)據(jù)的輸入流FileReader (File f); /利用已經(jīng)存在的File類(lèi)對(duì)象創(chuàng)建從該對(duì)象所對(duì)應(yīng)的文件中讀取數(shù)據(jù)的輸入流 FileWriter (String FileName); /FileWriter (File f); /FileWriter (String FileName,boolean append); /利用文件名(包括路徑名)字
26、符串創(chuàng)建從該文件讀取數(shù)據(jù)的輸入流, 2022年年4月月22日星期五日星期五6.5緩沖區(qū)輸入和輸出流輸入流FileReader和輸出流FileWriter雖然可以方便地完成輸入和輸出操作; ;對(duì)輸入和輸出有較快的時(shí)間要求時(shí) ,使用緩沖流類(lèi)在內(nèi)存中建立緩沖區(qū) .2022年年4月月22日星期五日星期五6.5.1 BufferedReader類(lèi)BufferedReader類(lèi)方法如下:public BufferedReader(Reader in);public BufferedReader(Reader in, int size) /參數(shù)in是超類(lèi)Reader的對(duì)象,size是用戶設(shè)定的緩沖區(qū)大小。p
27、ublic String readLine() throw IOException; /從文件中讀取一行字符 2022年年4月月22日星期五日星期五6.5.2 BufferedWriter類(lèi)BufferedWriter構(gòu)造方法如下public BufferedWriter (Writer out);public BufferedWriter (Writer out, int size);參數(shù)out是超類(lèi)Writer的對(duì)象,size是用戶設(shè)定的緩沖區(qū)大小。BufferedWriter類(lèi)除從超類(lèi)中繼承的方法外,還有常用方法:public void newLine() throw IOException; /用于寫(xiě)入行分割符2022年年4月月22日星期五日星期五n例題6-6:復(fù)制一個(gè)文件,比較一下帶緩沖區(qū)和不帶緩沖區(qū)讀寫(xiě)文件的效率有何區(qū)別。2022年年4月月22日星期五日星期五6.6 格式字節(jié)數(shù)據(jù)流DataInputStream類(lèi)和 DataOutputStream類(lèi)創(chuàng)建的對(duì)象被稱為數(shù)據(jù)輸入流和數(shù)據(jù)輸出流;數(shù)據(jù)輸入流和數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 七年級(jí)歷史與文化交流活動(dòng)計(jì)劃
- 2025年細(xì)微射頻同軸電纜項(xiàng)目合作計(jì)劃書(shū)
- 四年級(jí)音樂(lè)與藝術(shù)融合計(jì)劃
- 2024-2025崗位安全培訓(xùn)考試試題及參考答案(模擬題)
- 2025年物位儀合作協(xié)議書(shū)
- 2025年新工人入場(chǎng)安全培訓(xùn)考試試題及答案黃金題型
- 2025年汽車(chē)制造企業(yè)創(chuàng)新研發(fā)計(jì)劃
- 倒板施工合同方案的安全管理3篇
- 代銷(xiāo)協(xié)議合同版3篇
- 2025年農(nóng)業(yè)科技推廣工作總結(jié)及發(fā)展計(jì)劃
- 2025年中國(guó)尼龍注塑件市場(chǎng)調(diào)查研究報(bào)告
- 《智慧能源體系》課程教學(xué)大綱
- 大象版五年級(jí)下冊(cè)《科學(xué)》全套教學(xué)課件
- DBJ04-T 241-2024 公共建筑節(jié)能設(shè)計(jì)標(biāo)準(zhǔn)
- 1.2區(qū)域整體性和關(guān)聯(lián)性-以青田縣稻魚(yú)共生為例課件-高中地理人教版(2019)選擇性必修2
- 特殊人群安全用藥指導(dǎo)
- 工業(yè)物聯(lián)網(wǎng)安全風(fēng)險(xiǎn)評(píng)估-深度研究
- 2024年機(jī)場(chǎng)廣告行業(yè)投資分析及發(fā)展戰(zhàn)略研究咨詢報(bào)告
- 《洗地機(jī)培訓(xùn)方案》課件
- 手術(shù)室護(hù)理新進(jìn)展
- 鄭州市2025年高中畢業(yè)年級(jí)第一次質(zhì)量預(yù)測(cè)(一模) 化學(xué)試卷(含標(biāo)準(zhǔn)答案)
評(píng)論
0/150
提交評(píng)論