java上機06Chapter_第1頁
java上機06Chapter_第2頁
java上機06Chapter_第3頁
java上機06Chapter_第4頁
java上機06Chapter_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第6章 流和文件 內(nèi)容提要內(nèi)容提要:流概述基本輸入和輸出流標準輸入和輸出文件處理緩沖區(qū)輸入和輸出流格式字節(jié)數(shù)據(jù)流2022年年4月月22日星期五日星期五6.1流概述為進行數(shù)據(jù)的輸入/輸出操作,Java中把不同的輸入/輸出源(鍵盤、文件、網(wǎng)絡(luò)連接等)抽象表述為“流”(stream)。java.io包中定義了多個流類型(類或抽象類)來實現(xiàn)輸入/輸出功能 .在Java 1.1之前,java.io包中的流只有普通的字節(jié)流,以byte為基本處理單位 .Java 1.1開始,在java.io包中加入了專門處理字符流的類,使Java語言對字符流的處理更加方便和有效。 2022年年4月月22日星期五日星期五基本

2、的I/O數(shù)據(jù)流按照功能劃分為兩種基本的流:輸入流和輸出流n輸入流: 只能從中讀取數(shù)據(jù),而不能向其寫出數(shù)據(jù)n輸出流: 只能向其寫出數(shù)據(jù),而不能從中讀取數(shù)據(jù)n輸入和輸出流可以被連接到文件、網(wǎng)絡(luò)套接字或內(nèi)存緩沖區(qū)。 2022年年4月月22日星期五日星期五字符流和字節(jié)流按處理數(shù)據(jù)的單位劃分,Java支持兩 種基本的流類型: 字符流和字節(jié)流字節(jié)流字節(jié)流字符流字符流輸入InputStreamReader輸出OutputStreamWriter2022年年4月月22日星期五日星期五節(jié)點流和處理流 節(jié)點流: 可以從/向一個特定的地方(節(jié)點)讀寫數(shù)據(jù),例如磁盤或者一塊內(nèi)存。 處理流: 是對一個已存在的流的連接和

3、封裝,通過所封裝的流的功能調(diào)用實現(xiàn)數(shù)據(jù)讀/寫功能。2022年年4月月22日星期五日星期五節(jié)點流和處理流2022年年4月月22日星期五日星期五節(jié)點流類型(Node Streams)類類 型型 字字 符符 流流字字 節(jié)節(jié) 流流FileFileReaderFileWriterFileInputStreamFileOutputStreamMemory ArrayCharArrayReaderCharArrayWriterByteArrayInputStreamByteArrayOutputStreamMemory StringStringReaderStringWriterPipePipedReade

4、rPipedWriterPipedInputStreamPipedOutputStream2022年年4月月22日星期五日星期五處理流(Processing Streams)處理類型 字 符 流字 節(jié) 流 BufferingBufferedReaderBufferedWriterBufferedInputStreamBufferedOutputStreamFilteringFilterReaderFilterWriterFilterInputStreamFilterOutputStreamConverting between bytes and characterInputStreamRead

5、erOutputStreamWriterObject SerializationObjectInputStreamObjectOutputStreamData conversionDataInputStreamDataOutputStreamCountingLineNumberReaderLineNumberInputStreamPeeking aheadPusbackReaderPushbackInputStreamPintingPrintWriterPrintStream2022年年4月月22日星期五日星期五InputStream類提供的方法 三個基本的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類提供的方法 三個基本的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類提供的方法 三個基本的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類提供的方法 三個基本的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é)點流應(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àn)任意類型文件的復(fù)制。

10、2022年年4月月22日星期五日星期五6.3標準輸入和輸出 System.in 提供從“標準輸入”讀入數(shù)據(jù)的功能System.in 為InputStream類型.System.out 提供向“標準輸出”寫出數(shù)據(jù)的功能System.out為 PrintStream類型.2022年年4月月22日星期五日星期五向標準輸出寫出數(shù)據(jù)System.out的println/print方法println方法可將方法參數(shù)輸出并換行 print方法將方法參數(shù)輸出但不換行print和println方法針對多數(shù)數(shù)據(jù)類型進行了重寫 (boolean, char, int, long, float, double以及ch

11、ar, Object和 String).print(Object)和println(Object)方法中調(diào)用了參數(shù)的toString()方法,再將生成的字符串輸出2022年年4月月22日星期五日星期五從標準輸入讀取數(shù)據(jù)/標準輸入輸出字符處理 import java.io.*;public class StandIO1 public static void main(String args) char inChar; System.out.println(請輸入一個字符: ); try inChar = (char) System.in.read ( ); /從鍵盤讀入數(shù)據(jù)(字符) System

12、.out.println(輸入的字符是:+ inChar); catch (IOException e) System.out.println(e); 09032022年年4月月22日星期五日星期五從標準輸入讀取數(shù)據(jù)/標準輸入輸出字符處理 (JDK5.0以上)import java.io.*;public class StandIO2 public static void main(String args) int inInt; System.out.println(“請輸入一個數(shù)字: ); try Scanner in = new Scanner(System.in); inInt = in

13、.nextInt ( ); /從鍵盤讀入數(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)的類,包括提供文件操作功能的File類創(chuàng)建File類對象File f;f = new File(Test.java);f=new File(“F:/ok/HelloWorld.class”)在Java中,將目錄也當作文件處理File類中提供了實現(xiàn)目錄管理功能的方法File p=

14、new File(F:/ok/); File f=new File(p,HelloWorld.class); 2022年年4月月22日星期五日星期五File類方法介紹 關(guān)于文件/目錄名操作 String getName() String getPath() String getAbsolutePath() String getParent() boolean renameTo(File newName) File 測試操作 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類對象案例1.結(jié)合命令行參數(shù)的使用,練習(xí)從已經(jīng)存在的文件中讀入數(shù)據(jù)并顯示的過程;2.結(jié)合命令行參數(shù)的使用,練習(xí)從標準輸入中讀入數(shù)據(jù)并將數(shù)據(jù)寫到文件中的過程;n例題6-2:將練習(xí)6-1改成從File對象輸入和輸出數(shù)據(jù)。2022年年4月月22日星期五日星期五n例題6-3:寫一個程序,列出指定文件夾下的文件及

16、子文件夾的名稱、最后修改時間及文件大小,文件夾路徑從命令行輸入。2022年年4月月22日星期五日星期五6.4.2 文件過濾n文件過濾就是對文件名的過濾,即將符合條件的文件選擇出來進行操作。 n接口FileFilter和FilenameFilter來實現(xiàn)這一功能。n要想實現(xiàn)過濾功能,就要聲明一個類實現(xiàn)FileFilter和FilenameFilter接口中的accept()的方法,這個類常??梢苑Q為過濾器 .2022年年4月月22日星期五日星期五兩個接口中只有方法accept()public interface FileFilter boolean accept(File pathname);參

17、數(shù)pathname是要過濾目錄中的文件對象。public interface FilenameFilter boolean accept(File dir, String name); 參數(shù)dir是要過濾的目錄,name是目錄中的文件名。 2022年年4月月22日星期五日星期五n例題6-4:寫一個程序,列出指定文件夾及其所有子文件夾下所有Java源文件的完整路徑,文件夾路徑從命令行輸入。2022年年4月月22日星期五日星期五6.4.3 FileInputStream/ FileOutputStream類n 使用File類可以建立與磁盤文件的連接;讀取磁盤文件的相關(guān)屬性和對磁盤文件進行管理性操作

18、,n 使用File類不能完成對磁盤文件數(shù)據(jù)的讀寫操作。n FileInputStream/ FileOutputStream類可以用來實現(xiàn)對字節(jié)流文件的I/O處理 ,通過它提供的方法打開本地主機上的文件,并進行順序的讀寫。2022年年4月月22日星期五日星期五FileInputStream類FileInputStream (String FileName); /利用文件名(包括路徑名)字符串創(chuàng)建從該文件讀取數(shù)據(jù)的輸入流FileInputStream (File f); /利用已經(jīng)存在的File類對象創(chuàng)建從該對象所對應(yīng)的文件中讀取數(shù)據(jù)的輸入流FileInputStream (FileDescri

19、ptor fdObj); /利用文件描述符創(chuàng)建從該對象所對應(yīng)的文件中讀取數(shù)據(jù)的輸入流2022年年4月月22日星期五日星期五FileInputStream類讀入數(shù)據(jù)有兩種方式 :利用FileInputStream類提供的read方法 以FileInputStream類對象為原始數(shù)據(jù)源,再套上其它功能強大的輸入流 2022年年4月月22日星期五日星期五FileOutputStream類FileOutputStream (String FileName); /利用文件名(包括路徑名)字符串創(chuàng)建從該文件讀取數(shù)據(jù)的輸入流FileOutputStream (File f); /利用已經(jīng)存在的File類對象

20、創(chuàng)建從該對象所對應(yīng)的文件中讀取數(shù)據(jù)的輸入流FileOutputStream (FileDescriptor fdObj); /利用文件描述符創(chuàng)建從該對象所對應(yīng)的文件中讀取數(shù)據(jù)的輸入流FileOutputStream (String FileName,boolean append); /利用文件名(包括路徑名)字符串創(chuàng)建從該文件讀取數(shù)據(jù)的輸入流 2022年年4月月22日星期五日星期五FileOutputStream類向文件寫入數(shù)據(jù)有兩種方式 :利用FileOutputStream類提供的write方法來完成 以FileOutputStream類對象為原始數(shù)據(jù)源,再套上其它功能強大的輸入流 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ù)寫入到輸出流 /把文件FileIOTest1.txt中的內(nè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類RandomAcessFile類直接繼承于Object ;使用 RandomAcessFile類,用戶可以對文件進行任何所希望的操作。2022年年4月月22日星期五日星期五RandomAcessFile類方法RandomAcessFile (String filename,String mode); /利用文件 名 ( 包 括 路 徑 名 ) 字 符 串 f i l e n a m e 創(chuàng) 建RandomAcessFile類對象,并指定文件的操作模式mode(r為讀模式,rw為讀寫模式) RandomAces

24、sFile (File f, String mode); /利用已經(jīng)存在的File類對象f創(chuàng)建RandomAcessFile類對象,并指定文件的操作模式mode(r為讀模式,rw為讀寫模式)。 RandomAcessFile類提供了大量的讀寫文件的方法。2022年年4月月22日星期五日星期五n例題6-5:從磁盤讀入一個文本文件,將其中下標為奇數(shù)的(第1, 3, 5.個)字符改為A。2022年年4月月22日星期五日星期五6.4.4 FileReader/FileWriter類FileReader類以字符為單位從文件中讀入數(shù)據(jù);FileWriter類以字符為單位向文件中寫出數(shù)據(jù);這兩個類的構(gòu)造函數(shù)

25、中以String或File類型參數(shù)指定要讀寫的文件。 2022年年4月月22日星期五日星期五FileReader/FileWriter類方法FileReader (String FileName); /利用文件名(包括路徑名)字符串創(chuàng)建從該文件讀取數(shù)據(jù)的輸入流FileReader (File f); /利用已經(jīng)存在的File類對象創(chuàng)建從該對象所對應(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雖然可以方便地完成輸入和輸出操作; ;對輸入和輸出有較快的時間要求時 ,使用緩沖流類在內(nèi)存中建立緩沖區(qū) .2022年年4月月22日星期五日星期五6.5.1 BufferedReader類BufferedReader類方法如下:public BufferedReader(Reader in);public BufferedReader(Reader in, int size) /參數(shù)in是超類Reader的對象,size是用戶設(shè)定的緩沖區(qū)大小。p

27、ublic String readLine() throw IOException; /從文件中讀取一行字符 2022年年4月月22日星期五日星期五6.5.2 BufferedWriter類BufferedWriter構(gòu)造方法如下public BufferedWriter (Writer out);public BufferedWriter (Writer out, int size);參數(shù)out是超類Writer的對象,size是用戶設(shè)定的緩沖區(qū)大小。BufferedWriter類除從超類中繼承的方法外,還有常用方法:public void newLine() throw IOException; /用于寫入行分割符2022年年4月月22日星期五日星期五n例題6-6:復(fù)制一個文件,比較一下帶緩沖區(qū)和不帶緩沖區(qū)讀寫文件的效率有何區(qū)別。2022年年4月月22日星期五日星期五6.6 格式字節(jié)數(shù)據(jù)流DataInputStream類和 DataOutputStream類創(chuàng)建的對象被稱為數(shù)據(jù)輸入流和數(shù)據(jù)輸出流;數(shù)據(jù)輸入流和數(shù)據(jù)

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論