java的數(shù)據(jù)輸入從控制臺輸入數(shù)據(jù)_第1頁
java的數(shù)據(jù)輸入從控制臺輸入數(shù)據(jù)_第2頁
java的數(shù)據(jù)輸入從控制臺輸入數(shù)據(jù)_第3頁
java的數(shù)據(jù)輸入從控制臺輸入數(shù)據(jù)_第4頁
java的數(shù)據(jù)輸入從控制臺輸入數(shù)據(jù)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、java的數(shù)據(jù)輸入:從控制臺輸入數(shù)據(jù)Java控制臺是一種圖形用戶界面(GUI),其作用有二:一是輸入數(shù)據(jù),二是顯示輸出結(jié)果。通過在控制臺的輸入輸出,就使用戶能完成配置、監(jiān)視、維護和故障排除等工作。Java控制臺虛擬機是否具有控制臺取決于底層平臺,還取決于調(diào)用虛擬機的方式。如果虛擬機從一個交互式命令行開始啟動,且沒有重定向標準輸入和輸出流,那么其控制臺將存在,并且通常連接到鍵盤并從虛擬機啟動的地方顯示。如果虛擬機是自動啟動的,例如由后臺作業(yè)調(diào)度程序啟動,那么它通常沒有控制臺。因此,對于普通微機里的java虛擬機來說,通常控制臺就是指的顯示器和鍵盤,即:用顯示器輸出結(jié)果、用鍵盤輸入數(shù)據(jù)。由于輸出相

2、對比較簡單,這里主要討論輸入數(shù)據(jù)的方式。從控制臺輸入數(shù)據(jù)的方式有多種,以前主要是使用標準輸入流的方式,增加了使用Scanner類的方式,又增加了使用Console類的方式。7.8.1 使用標準輸入流的方式標準輸入流在中已經(jīng)討論過,例7-13和例7-14的數(shù)據(jù)就是從控制臺(鍵盤)輸入的,辦法很簡單,即使用標準輸入流獲得。也可以將橋接至字符流,從字符流中讀入數(shù)據(jù)。 例7-22文件復(fù)制程序,本例中先使用InputStreamReader獲取標準輸入流,再用字符流BufferedReader包裝InputStreamReader,以讀取源文件名和目標文件名。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("請輸入目標文件名:");10:     dstFile = br.readLine(); /用緩沖字符流獲得目標文件名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:     可見利用標準輸入流進行控制臺輸入的方式非常麻煩:如果從鍵盤獲取的是字符串,需要采用BufferedReader類來進行處理;如果獲取的是其他類型數(shù)據(jù),需要手工進行轉(zhuǎn)換;在讀取的過程中還必須捕獲IOException。不過這是及更早版本中從控制臺讀取數(shù)據(jù)唯一辦法。7.8.2 使用Sca

8、nner類的方式從開始,包中增加了Scanner類,它是一個可以使用正則表達式來解析基本類型和字符串的簡單文本掃描器。Scanner類從字面上講是“掃描”的意思,它把給定的字符串解析成Java的各種基本數(shù)據(jù)類型,用于分解字符串的默認的分隔符是空格,也可以定制。其構(gòu)造方法如表7-15。  表7-15 Scanner類的構(gòu)造方法方法描述Scanner(File source)Scanner(File source, String charsetName)構(gòu)造一個新的 Scanner,其值是從指定文件掃描獲得。后者指定了字符集。Scanner(InputStream source

9、)Scanner(InputStream source, String charsetName)構(gòu)造一個新的 Scanner,其值是從指定的輸入流掃描獲得。后者指定了字符集。Scanner(Readable source)構(gòu)造一個新的 Scanner,其值是從指定源掃描獲得。Scanner(ReadableByteChannel source)Scanner(ReadableByteChannel source, String charsetName)構(gòu)造一個新的 Scanner,其值是從指定信道掃描獲得。后者指定了字符集。Scanner(String source)構(gòu)造一個新的 Scanne

10、r,其值是從指定字符串掃描獲得。 由表7-15可見,Scanner可以從指定的文件、輸入流、源、信道或字符串等多種來源構(gòu)造獲得。要從控制臺讀取數(shù)據(jù),使用參數(shù)為InputStream的方法,傳遞標準輸入流給它,此時Scanner掃描該輸入流中的字符,同時還可以讓讀入的字符串匹配一定的正則表達式模式,如果不匹配時將拋出InputMismatchException異常。Scanner封裝了很多方法,比如方法next就可以從各種輸入流中連續(xù)讀入字符串。不僅如此,它還可以讀入除char之外的其他七種基本類型和兩個大數(shù)字類型,并且不需要手工進行轉(zhuǎn)換,如方法nextInt將讀入的下一數(shù)據(jù)轉(zhuǎn)換為in

11、t變量,方法nextByte將讀入的下一數(shù)據(jù)轉(zhuǎn)換為byte變量,方法nextLine將讀入的下一行轉(zhuǎn)換為String變量,等等。例7-23文件復(fù)制程序,本例中使用Scanner類讀取源文件名和目標文件名。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("請輸入目標文件名:");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將控制臺輸入簡單化了,而是在其內(nèi)部的實現(xiàn)中對各種輸入字符的處理進行了更高層次的封裝,同時已經(jīng)把IOException處理了。例7-24通過控制臺輸入多個正整數(shù),計算奇數(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:    運行結(jié)果為:輸入正整數(shù),以空格或回車分開,最后輸入一個非數(shù)字結(jié)束輸入操作:3 4 5 6 7 22 3 f奇數(shù)和是:18偶數(shù)和是:327.8.3 使用Console類的方式從開始,又在包中增加了一個Console類,該類用于獲得與當前Java虛擬機關(guān)聯(lián)的基于字符的控制臺設(shè)備。在純字符的控制臺界面下,可以更加方便的讀入數(shù)據(jù)。先來看使用Console類的獲取源文件名和目標文件名的文件復(fù)制程序。例7-25文件復(fù)制程

20、序,本例中使用Console類讀取源文件名和目標文件名。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( "不可獲得控制臺!" );7:        else8:        srcFile = console.readLine("請輸

22、入源文件名:");9:        dstFile = console.readLine("請輸入目標文件名:");10:     /與例7-23中1122行相同11:     12:     13:     以前輸入數(shù)據(jù)前的提示信息需要使用System.out.print();來輸出,但是使用Console類,可以在方法參數(shù)中直接放入提示信息,這進一步簡化了代碼。Conso

23、le類直接繼承自O(shè)bject類,使用默認的構(gòu)造方法,它提供的方法不多,表7-16中列出了Console類的方法。表7-16 Console類的方法方法描述Reader reader()獲取與此控制臺關(guān)聯(lián)的唯一Reader對象。String readLine()String readLine(String fmt, Object. args)從控制臺讀取單行文本。后者提供一個格式化提示。char readPassword()char readPassword(String fmt, Object. args)從控制臺讀取密碼,禁用回顯。后者提供一個格式化提示。PrintWriter writer

24、()獲取與此控制臺關(guān)聯(lián)的唯一PrintWriter對象。Console printf(String format, Object. args)使用指定格式字符串和參數(shù)將格式化字符串寫入此控制臺輸出流。Console format(String fmt, Object. args)使用指定格式字符串和參數(shù)將格式化字符串寫入此控制臺的輸出流中。void flush()刷新控制臺,并強制立即寫入所有緩沖的輸出。 這些方法中,readPassword是一個很重要的方法,它可以不回顯輸入密碼,這對于需要在控制臺中輸入密碼等敏感信息是一種很好的方式。例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( "不可獲得控制臺!" );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)容里面會有圖紙預(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

提交評論