9 流、文件及基于文本的應(yīng)用修改版.ppt_第1頁
9 流、文件及基于文本的應(yīng)用修改版.ppt_第2頁
9 流、文件及基于文本的應(yīng)用修改版.ppt_第3頁
9 流、文件及基于文本的應(yīng)用修改版.ppt_第4頁
9 流、文件及基于文本的應(yīng)用修改版.ppt_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Java程序設(shè)計(jì),第9章 輸入、輸出流及文件處理,9.1 流式輸入與輸出,大部分程序都需要輸入/輸出處理,比如從鍵盤讀取數(shù)據(jù)、向屏幕中輸出數(shù)據(jù)、從文件中讀或者向文件中寫數(shù)據(jù)、在一個(gè)網(wǎng)絡(luò)連接上進(jìn)行讀寫操作等。在Java中,把這些不同類型的輸入、輸出源抽象為流(Stream。 按流的方向,可分為輸入流與輸出流。,9.1.1 字節(jié)流與字符流,1InputStream類,InputStream類最重要的方法是讀數(shù)據(jù)的read()方法。read()方法功能是逐字節(jié)地以二進(jìn)制的原始方式讀取數(shù)據(jù),它有三種形式: public int read(); public int read(byte b); publ

2、ic int read(byte b, int off, int len);,2OutputStream類,OutputStream類的重要方法是write(),它的功能是將字節(jié)寫入流中,write()方法有三種形式: public void write (int b);/ 將參數(shù)b的低位字節(jié)寫入到輸出流 public void write (byte b);/ 將字節(jié)數(shù)組b中的全部字節(jié)順序?qū)懭氲捷敵隽?public void write(byte b, int off, int len);/ 將字節(jié)數(shù)組b中從off開始的len個(gè)字節(jié)寫入到流中 Output的另外兩個(gè)方法是flush()及cl

3、ose()。 public void flush (); public void close();,3Reader類,Reader類與InputStream類相似,都是輸入流,但差別在于Reader類讀取的是字符(char),而不是字節(jié)。 Reader的重要方法是read(),有三種形式: public int read(); public int read(char b); public int read(char b, int off, int len);,4Writer類,Writer類與OutputStream類相似,都是輸出流,但差別在于Writer類寫入的是字符(char),而不是

4、字節(jié)。Writer的方法有: public void write (int b);/ 將參數(shù)b的低兩字節(jié)寫入到輸出流 public void write (char b);/ 將字符數(shù)組b中的全部字節(jié)順序?qū)懭氲捷敵隽?public void write(char b, int off, int len);/ 將字節(jié)數(shù)組b中從off開始的len個(gè)字節(jié)寫入到流中 public void write( String s);/ 將字符串寫入流中 public void write( String s, int off, int len);/ 將字符串寫入流中, off為位置,len為長度 public

5、 void flush ();/ 刷新流 public void close();/ 關(guān)閉流,9.1.2 節(jié)點(diǎn)流和處理流,按照流是否直接與特定的地方(如磁盤、內(nèi)存、設(shè)備等)相連,分為節(jié)點(diǎn)流與處理流兩類。 (1)節(jié)點(diǎn)流(Node Stream) 可以從或向一個(gè)特定的地方(節(jié)點(diǎn))讀寫數(shù)據(jù)。如文件流FileReader。 (2)處理流(Processing Stream) 是對(duì)一個(gè)已存在的流的連接和封裝,通過所封裝的流的功能調(diào)用實(shí)現(xiàn)數(shù)據(jù)讀、寫功能。處理流又稱為過濾流,如緩沖處理流BufferedReader。,節(jié)點(diǎn)流與處理流的關(guān)系,如圖所示。節(jié)點(diǎn)流直接與節(jié)點(diǎn)(如文件)相連,而處理流對(duì)節(jié)點(diǎn)流或其他處理

6、流進(jìn)一步進(jìn)行處理(如緩沖、組裝成對(duì)象,等等)。,處理流的構(gòu)造方法總是要帶一個(gè)其他的流對(duì)象作參數(shù)。如: BufferedReader in = new BufferedReader(new FileReader(file); BufferedReader in2 = new BufferedReader( new (InputstReamreader( new FileInputStream(file); 一個(gè)流對(duì)象經(jīng)過其他流的多次包裝,稱為流的鏈接,常用的節(jié)點(diǎn)流,常用的處理流,9.1.3 標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出,System.out 提供向“標(biāo)準(zhǔn)輸出”寫出數(shù)據(jù)的功能 System.out為 Pri

7、ntStream類型. System.in 提供從“標(biāo)準(zhǔn)輸入”讀入數(shù)據(jù)的功能 System.in 為InputStream類型. System.err提供向“標(biāo)準(zhǔn)錯(cuò)誤輸出”寫出數(shù)據(jù)的功能 System.err為 PrintStream類型.,向標(biāo)準(zhǔn)輸出寫出數(shù)據(jù),System.out/System.err的println/print方法 println方法可將方法參數(shù)輸出并換行 print方法將方法參數(shù)輸出但不換行 print和println方法針對(duì)多數(shù)數(shù)據(jù)類型進(jìn)行了重寫 (boolean, char, int, long, float, double以及char, Object和 String

8、). print(Object)和println(Object)方法中調(diào)用了參數(shù)的toString()方法,再將生成的字符串輸出,從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),為了使用方便,經(jīng)常將System.in用各種處理流進(jìn)行封裝處理,如: BufferedReader br = new BufferedReader( new InputStreamReader(System.in); br.readLine();,例2-4,import java.io.*; class AppLineInOut public static void main(String args) String s=; System.out.

9、println(please input a line:); try BufferedReader in=new BufferedReader(new InputStreamReader(System.in); s=in.readLine(); catch(IOException e) System.out.println(You have entered:+s); ,例2-5,import java.io.*; public class AppNumInOut public static void main(String args) String s = ; int n = 0; doubl

10、e d = 0; try BufferedReader in = new BufferedReader(new InputStreamReader(System.in); System.out.println(please input an int:); s = in.readLine(); n = Integer.parseInt(s); System.out.println(please input a double:); s = in.readLine(); d = Double.parseDouble(s); catch(IOException e) System.out.printl

11、n(You have entered: + n + and + d); ,2006.02 By SCEMI XMJ,StringTokenizer類,分解字符串成可被獨(dú)立使用的單詞 java.util包,創(chuàng)建StringTokenizer對(duì)象 StringTokenizer(String s) StringTokenizer(String s,String delim),StringTokenizer類常用方法 countTokens()單詞計(jì)數(shù)變量 hasMoreTokens()countTokens0 true nextToken() 逐個(gè)獲取單詞,import java.util.*;

12、public class ST public static void main(String args) String str=“中國.四川.攀枝花”; StringTokenizer st=new StringTokenizer(str,“.”); int number=st.countTokens(); System.out.println(“共有單詞:”+number); while(st.hasMoreTokens() System.out.print(number-st.countTokens()+“:”); System.out.println(st.nextToken(); ,共

13、有單詞:3 0:中國 1:四川 2:攀枝花,import java.util.*; import java.io.*; public class TestConsoleTokenizer public static void main(String args) String str,str1; double d;int i; try BufferedReader in=new BufferedReader(new InputStreamReader(System.in); str=in.readLine(); StringTokenizer st=new StringTokenizer(str

14、); str1=st.nextToken(); d=Double.parseDouble(str1); str1=st.nextToken(); i=Integer.parseInt(str1); System.out.println(d + +i + ); catch(IOException e) e.printStackTrace(); ,import java.util.InputMismatchException; import java.util.Scanner; public class TestConsoleScanner public static void main(Stri

15、ng args) try scanner=new Scanner(System.in); double d; int i; String str; d=scanner.nextDouble(); i=scanner.nextInt(); str=scanner.next(); System.out.println(d+ + i+ +str); catch(InputMismatchException e) e.printStackTrace(); finally System.out.println(over!); ,9.2 文件及目錄,9.2.1 文件與目錄管理,文件類,java.io包中定

16、義與數(shù)據(jù)輸入、輸出功能有關(guān)的類,包括提供文件操作功能的File類 創(chuàng)建File類對(duì)象 File f; f = new File(Test.java); f = new File(E:ex,Test.java); 在Java中,將目錄也當(dāng)作文件處理File類中提供了實(shí)現(xiàn)目錄管理功能的方法 File path = new File(E:ex); File f = new File(path, Test.java);,File類方法介紹,關(guān)于文件/目錄名操作 String getName() String getPath() String getAbsolutePath() String getPa

17、rent() 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() 示例:列出所有文件 ListAllFiles.java,9.2.2 文件輸入與輸

18、出流,文件輸入 可使用FileReader類以字符為單位從文件中讀入數(shù)據(jù) 可使用BufferedReader類的readLine方法以行為單位讀入一行字符 文件輸出 可使用FileWriter類以字符為單位向文件中寫出數(shù)據(jù) 使用PrintWriter類的print和println方法以行為單位寫出數(shù)據(jù) 例 File MyFilenew File(MyTextFile); DataInputStream dinnew DataInputStream(new FileInputStream(MyFile); Data OutputStream dournew DataOutputStream(ne

19、w FileOutputStream (MyFile);,9.2.3 RandomAccessFile類,RandomAccessFile,可以實(shí)現(xiàn)對(duì)文件的隨機(jī)讀寫操作 RandomAccessFile(String name,String mode); RandomAccessFile(File f,String mode); public void seek(long pos); readBealoon(),readChar(),readInt(),readLong(),readFloat(),readDouble(),readLine(),readUTF()等 writeBealoon(

20、),writeChar(),writeInt(),writeLong(),writeFloat(),writeDouble(),writeLine(),writeUTF()等,9. 3 基于文本的應(yīng)用的幾個(gè)問題,9.1 命令行參數(shù),在啟動(dòng)Java應(yīng)用程序時(shí)可以一次性地向應(yīng)用程序中傳遞0多個(gè)參數(shù)-命令行參數(shù) 命令行參數(shù)使用格式: java ClassName lisa bily Mr Brown 命令行參數(shù)被系統(tǒng)以String數(shù)組的方式傳遞給應(yīng)用程序中的main方法,由參數(shù)args接收 public static void main(String args),命令行參數(shù)用法舉例,1 public

21、 class Test9_1 2 public static void main(String args) 3 for ( int i = 0; i args.length; i+ ) 4 System.out.println(args + i + = + argsi); 5 6 7 /運(yùn)行程序Test9_1.java java Test9_1 lisa bily Mr Brown /輸出結(jié)果: args0 = lisa args1 = bily args2 = Mr Brown,9.3.1 系統(tǒng)屬性(System Properties),在Java中,系統(tǒng)屬性起到替代環(huán)境變量的作用(環(huán)境變量

22、是平臺(tái)相關(guān)的) 可使用System.getProperties()方法獲得一個(gè) Properties類的對(duì)象,其中包含了所有可用的系統(tǒng)屬性信息 可使用System.getProperty(String name)方法獲得特定系統(tǒng)屬性的屬性值 在命令行運(yùn)行Java程序時(shí)可使用-D選項(xiàng)添加新的系統(tǒng)屬性,9.3.2 Properties 類,Properties類可實(shí)現(xiàn)屬性名到屬性值的映射,屬性名和屬性值均為String類型. Properties類的 propertyNames() 方法可以返回以Enumeration類型表示的所有可用系統(tǒng)屬性屬性名. Properties類的 getProper

23、ty(String key)方法獲得特定系統(tǒng)屬性的屬性值. Properties類的load和save方法可以實(shí)現(xiàn)將系統(tǒng)屬性信息寫入文件和從文件中讀取屬性信息. Integer.getInteger(String key等得可直接得系統(tǒng)屬性,9.3.3 處理Deprecated的API,由于JDK版本的變化,有一部分類、方法或?qū)傩栽谛碌陌姹局胁惶岢褂没蛘卟荒苁褂?,這種情況稱為Deprecated的類、方法或?qū)傩浴?若要查看Deprecation的詳細(xì)信息,在編譯時(shí),可加上-deprecation選項(xiàng),9.3.4 正則表達(dá)式,正則表達(dá)式是文本處理中常用的工具,它實(shí)際上是用來匹配字符串的一種模式。在 Java中有一個(gè)正則表達(dá)式引擎(在java.util.regex包中),可以用正則表達(dá)式來驗(yàn)證和處理文本字符。,正則表達(dá)式的基本元素,d 表示數(shù)字,相當(dāng)于0-9 D 表示非數(shù)字,相當(dāng)于 0-9 s 表示空白符,相當(dāng)于 tnx0Bfr S 表示非空白符,相當(dāng)于s w 表示單詞字符,相當(dāng)于 a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論