版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、java的數(shù)據(jù)輸入:從控制臺(tái)輸入數(shù)據(jù)Java控制臺(tái)是一種圖形用戶界面(GUI),其作用有二:一是輸入數(shù)據(jù),二是顯示輸出結(jié)果。通過在控制臺(tái)的輸入輸出,就使用戶能完成配置、監(jiān)視、維護(hù)和故障排除等工作。Java控制臺(tái)虛擬機(jī)是否具有控制臺(tái)取決于底層平臺(tái),還取決于調(diào)用虛擬機(jī)的方式。如果虛擬機(jī)從一個(gè)交互式命令行開始啟動(dòng),且沒有重定向標(biāo)準(zhǔn)輸入和輸出流,那么其控制臺(tái)將存在,并且通常連接到鍵盤并從虛擬機(jī)啟動(dòng)的地方顯示。如果虛擬機(jī)是自動(dòng)啟動(dòng)的,例如由后臺(tái)作業(yè)調(diào)度程序啟動(dòng),那么它通常沒有控制臺(tái)。因此,對于普通微機(jī)里的java虛擬機(jī)來說,通??刂婆_(tái)就是指的顯示器和鍵盤,即:用顯示器輸出結(jié)果、用鍵盤輸入數(shù)據(jù)。由于輸出相
2、對比較簡單,這里主要討論輸入數(shù)據(jù)的方式。從控制臺(tái)輸入數(shù)據(jù)的方式有多種,以前主要是使用標(biāo)準(zhǔn)輸入流的方式,增加了使用Scanner類的方式,又增加了使用Console類的方式。7.8.1 使用標(biāo)準(zhǔn)輸入流的方式標(biāo)準(zhǔn)輸入流在中已經(jīng)討論過,例7-13和例7-14的數(shù)據(jù)就是從控制臺(tái)(鍵盤)輸入的,辦法很簡單,即使用標(biāo)準(zhǔn)輸入流獲得。也可以將橋接至字符流,從字符流中讀入數(shù)據(jù)。 例7-22文件復(fù)制程序,本例中先使用InputStreamReader獲取標(biāo)準(zhǔn)輸入流,再用字符流BufferedReader包裝InputStreamReader,以讀取源文件名和目標(biāo)文件名。1:
3、60; import java.io.*;2: public class Example7_22 3: public static void main(String args) 4: try 5: BufferedReader br = new BufferedRead
4、er(new InputStreamReader(System.in);6: String srcFile = null, dstFile = null;7: System.out.print("請輸入源文件名:");8: srcFile = br.readLine(); /用緩沖字符流獲得源文件名9:
5、60; System.out.print("請輸入目標(biāo)文件名:");10: dstFile = br.readLine(); /用緩沖字符流獲得目標(biāo)文件名11: byte data=new byte1;12: BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile);13: BufferedOutputStrea
6、m bos = new BufferedOutputStream(new FileOutputStream(dstFile);14: while(bis.read(data) != -1) bos.write(data);15: bos.flush();16: System.out.println("文件復(fù)制成功!");17: bis.close();18: bos.close();19
7、: catch(IOException e)20: e.printStackTrace();21: 22: 23: 可見利用標(biāo)準(zhǔn)輸入流進(jìn)行控制臺(tái)輸入的方式非常麻煩:如果從鍵盤獲取的是字符串,需要采用BufferedReader類來進(jìn)行處理;如果獲取的是其他類型數(shù)據(jù),需要手工進(jìn)行轉(zhuǎn)換;在讀取的過程中還必須捕獲IOException。不過這是及更早版本中從控制臺(tái)讀取數(shù)據(jù)唯一辦法。7.8.2 使用Sca
8、nner類的方式從開始,包中增加了Scanner類,它是一個(gè)可以使用正則表達(dá)式來解析基本類型和字符串的簡單文本掃描器。Scanner類從字面上講是“掃描”的意思,它把給定的字符串解析成Java的各種基本數(shù)據(jù)類型,用于分解字符串的默認(rèn)的分隔符是空格,也可以定制。其構(gòu)造方法如表7-15。 表7-15 Scanner類的構(gòu)造方法方法描述Scanner(File source)Scanner(File source, String charsetName)構(gòu)造一個(gè)新的 Scanner,其值是從指定文件掃描獲得。后者指定了字符集。Scanner(InputStream source
9、)Scanner(InputStream source, String charsetName)構(gòu)造一個(gè)新的 Scanner,其值是從指定的輸入流掃描獲得。后者指定了字符集。Scanner(Readable source)構(gòu)造一個(gè)新的 Scanner,其值是從指定源掃描獲得。Scanner(ReadableByteChannel source)Scanner(ReadableByteChannel source, String charsetName)構(gòu)造一個(gè)新的 Scanner,其值是從指定信道掃描獲得。后者指定了字符集。Scanner(String source)構(gòu)造一個(gè)新的 Scanne
10、r,其值是從指定字符串掃描獲得。 由表7-15可見,Scanner可以從指定的文件、輸入流、源、信道或字符串等多種來源構(gòu)造獲得。要從控制臺(tái)讀取數(shù)據(jù),使用參數(shù)為InputStream的方法,傳遞標(biāo)準(zhǔn)輸入流給它,此時(shí)Scanner掃描該輸入流中的字符,同時(shí)還可以讓讀入的字符串匹配一定的正則表達(dá)式模式,如果不匹配時(shí)將拋出InputMismatchException異常。Scanner封裝了很多方法,比如方法next就可以從各種輸入流中連續(xù)讀入字符串。不僅如此,它還可以讀入除char之外的其他七種基本類型和兩個(gè)大數(shù)字類型,并且不需要手工進(jìn)行轉(zhuǎn)換,如方法nextInt將讀入的下一數(shù)據(jù)轉(zhuǎn)換為in
11、t變量,方法nextByte將讀入的下一數(shù)據(jù)轉(zhuǎn)換為byte變量,方法nextLine將讀入的下一行轉(zhuǎn)換為String變量,等等。例7-23文件復(fù)制程序,本例中使用Scanner類讀取源文件名和目標(biāo)文件名。1: import java.io.*;2: import java.util.*;3: public class Example7_23 4:
12、 public static void main(String args) 5: String srcFile = null, dstFile = null;6: Scanner scanner = new Scanner(System.in);7: System.out.print("請輸入源文件名:");8:
13、60; srcFile = scanner.nextLine();9: System.out.print("請輸入目標(biāo)文件名:");10: dstFile = scanner.nextLine();11: try 12: byte data=new byte1;13: BufferedInp
14、utStream bis = new BufferedInputStream(new FileInputStream(srcFile);14: BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dstFile);15: while(bis.read(data) != -1) bos.write(data);16: bos.flush();17: Sy
15、stem.out.println("文件復(fù)制成功!");18: bis.close();19: bos.close();20: catch(IOException e)21: e.printStackTrace();22: 23: 24: 可見從鍵盤讀取的代碼得到了很大簡化,并且不必再捕獲或聲明IOEx
16、ception,但這并不是Scanner將控制臺(tái)輸入簡單化了,而是在其內(nèi)部的實(shí)現(xiàn)中對各種輸入字符的處理進(jìn)行了更高層次的封裝,同時(shí)已經(jīng)把IOException處理了。例7-24通過控制臺(tái)輸入多個(gè)正整數(shù),計(jì)算奇數(shù)和與偶數(shù)和。1: import java.util.*;2: public class Example7_24 3: public static void main(Stri
17、ng args) 4: int i, odd = 0, even = 0;5: System.out.print("輸入正整數(shù),以空格或回車分開,輸入非數(shù)字結(jié)束輸入:");6: Scanner scanner = new Scanner(System.in);7: while(sca
18、nner.hasNextInt()8: i = scanner.nextInt();9: if(I % 2 != 0) odd = odd + i;10: else even = even + i;11: 12: Scanner.close();13: System.out.println(&quo
19、t;奇數(shù)和是:" + odd + "n偶數(shù)和是:" + even);14: 15: 運(yùn)行結(jié)果為:輸入正整數(shù),以空格或回車分開,最后輸入一個(gè)非數(shù)字結(jié)束輸入操作:3 4 5 6 7 22 3 f奇數(shù)和是:18偶數(shù)和是:327.8.3 使用Console類的方式從開始,又在包中增加了一個(gè)Console類,該類用于獲得與當(dāng)前Java虛擬機(jī)關(guān)聯(lián)的基于字符的控制臺(tái)設(shè)備。在純字符的控制臺(tái)界面下,可以更加方便的讀入數(shù)據(jù)。先來看使用Console類的獲取源文件名和目標(biāo)文件名的文件復(fù)制程序。例7-25文件復(fù)制程
20、序,本例中使用Console類讀取源文件名和目標(biāo)文件名。1: import java.io.*;2: public class Example7_23 3: public static void main(String args) 4: String srcFile = null, dstFile = nu
21、ll;5: Console console = System.console();6: if (console = null) System.out.println( "不可獲得控制臺(tái)!" );7: else8: srcFile = console.readLine("請輸
22、入源文件名:");9: dstFile = console.readLine("請輸入目標(biāo)文件名:");10: /與例7-23中1122行相同11: 12: 13: 以前輸入數(shù)據(jù)前的提示信息需要使用System.out.print();來輸出,但是使用Console類,可以在方法參數(shù)中直接放入提示信息,這進(jìn)一步簡化了代碼。Conso
23、le類直接繼承自O(shè)bject類,使用默認(rèn)的構(gòu)造方法,它提供的方法不多,表7-16中列出了Console類的方法。表7-16 Console類的方法方法描述Reader reader()獲取與此控制臺(tái)關(guān)聯(lián)的唯一Reader對象。String readLine()String readLine(String fmt, Object. args)從控制臺(tái)讀取單行文本。后者提供一個(gè)格式化提示。char readPassword()char readPassword(String fmt, Object. args)從控制臺(tái)讀取密碼,禁用回顯。后者提供一個(gè)格式化提示。PrintWriter writer
24、()獲取與此控制臺(tái)關(guān)聯(lián)的唯一PrintWriter對象。Console printf(String format, Object. args)使用指定格式字符串和參數(shù)將格式化字符串寫入此控制臺(tái)輸出流。Console format(String fmt, Object. args)使用指定格式字符串和參數(shù)將格式化字符串寫入此控制臺(tái)的輸出流中。void flush()刷新控制臺(tái),并強(qiáng)制立即寫入所有緩沖的輸出。 這些方法中,readPassword是一個(gè)很重要的方法,它可以不回顯輸入密碼,這對于需要在控制臺(tái)中輸入密碼等敏感信息是一種很好的方式。例7-26使用Console類的readPas
25、sword方法讀取密碼信息。1: import java.io.*;2: public class Example7_26 3: public static void main(String args) 4: Console console = System.console();5:
26、 if( console = null ) System.out.println( "不可獲得控制臺(tái)!" );6: else 7: String user = console.readLine("請輸入用戶名:" );8: String pwd = new String(console.readPassword("請輸入密碼:");9: console.printf( "用戶名是: %sn", user);10: console.printf( "密碼是: %sn", pwd);11: pwd = "
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版拌合料生產(chǎn)設(shè)備維修與保養(yǎng)合同4篇
- 2025年度農(nóng)業(yè)休閑觀光區(qū)綠化景觀建設(shè)與運(yùn)營合同4篇
- 2025版安防弱電系統(tǒng)集成服務(wù)合同3篇
- 2025年度個(gè)人肖像攝影合同范本集4篇
- 二零二五年度南京體育健身行業(yè)勞務(wù)派遣合同
- 二零二五年度木材行業(yè)安全生產(chǎn)責(zé)任保險(xiǎn)合同
- 第8~9講 反應(yīng)動(dòng)力學(xué)基礎(chǔ)知識(shí)
- 2025年度建筑幕墻工程安全質(zhì)量責(zé)任合同4篇
- 二零二五年度農(nóng)業(yè)生態(tài)環(huán)境保護(hù)與修復(fù)服務(wù)合同
- 二零二五年度使用知識(shí)產(chǎn)權(quán)許可合同
- 中國末端執(zhí)行器(靈巧手)行業(yè)市場發(fā)展態(tài)勢及前景戰(zhàn)略研判報(bào)告
- 北京離婚協(xié)議書(2篇)(2篇)
- 2025中國聯(lián)通北京市分公司春季校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 康復(fù)醫(yī)學(xué)科患者隱私保護(hù)制度
- Samsung三星SMARTCAMERANX2000(20-50mm)中文說明書200
- 2024年藥品質(zhì)量信息管理制度(2篇)
- 2024年安徽省高考地理試卷真題(含答案逐題解析)
- 廣東省廣州市2024年中考數(shù)學(xué)真題試卷(含答案)
- 高中學(xué)校開學(xué)典禮方案
- 內(nèi)審檢查表完整版本
- 3級人工智能訓(xùn)練師(高級)國家職業(yè)技能鑒定考試題及答案
評論
0/150
提交評論