您的位置:首页 > 编程语言 > Java开发

Java从控制台读入数据的几种方法

2011-12-24 13:50 253 查看
这里记录Java中从控制台读入信息的几种方式,已备后查!(1)JDK1.4(JDK1.5和JDK1.6也都兼容这种方法)publicclassTestConsole1{ publicstaticvoidmain(String[]args){ Stringstr=readDataFromConsole("Pleaseinputstring:); System.out.println("Theinformationfromconsole:+str); } /** *UseInputStreamReaderandSystem.intoreaddatafromconsole * *@paramprompt * *@returninputstring */ privatestaticStringreadDataFromConsole(Stringprompt){ BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in)); Stringstr=null; try{ System.out.print(prompt); str=br.readLine(); }catch(IOExceptione){ e.printStackTrace(); } returnstr; } }[/code]
(2)JDK1.5(利用Scanner进行读取)publicclassTestConsole2{publicstaticvoidmain(String[]args){Stringstr=readDataFromConsole("Pleaseinputstring:");System.out.println("Theinformationfromconsole:"+str);}/***Usejava.util.Scannertoreaddatafromconsole**@paramprompt**@returninputstring*/privatestaticStringreadDataFromConsole(Stringprompt){Scannerscanner=newScanner(System.in);System.out.print(prompt);returnscanner.nextLine();}}[/code]
Scanner还可以很方便的扫描文件,读取里面的信息并转换成你要的类型,比如对“22.23.33.334.5done”这样的数据求和,见如下代码:
publicclassTestConsole4{publicstaticvoidmain(String[]args)throwsIOException{FileWriterfw=newFileWriter("num.txt");fw.write("22.23.33.334.5done");fw.close();System.out.println("Sumis"+scanFileForSum("num.txt"));}publicstaticdoublescanFileForSum(StringfileName)throwsIOException{doublesum=0.0;FileReaderfr=null;try{fr=newFileReader(fileName);Scannerscanner=newScanner(fr);while(scanner.hasNext()){if(scanner.hasNextDouble()){sum=sum+scanner.nextDouble();}else{Stringstr=scanner.next();if(str.equals("done")){break;}else{thrownewRuntimeException("FileFormatiswrong!");}}}}catch(FileNotFoundExceptione){thrownewRuntimeException("File"+fileName+"notfound!");}finally{if(fr!=null)fr.close();}returnsum;}}
(3)JDK1.6(利用java.io.Console进行读取)JDK6中提供了java.io.Console类专用来访问基于字符的控制台设备.你的程序如果要与Windows下的cmd或者Linux下的Terminal交互,就可以用Console类代劳.(类似System.in和System.out)但我们不总是能得到可用的Console,一个JVM是否有可用的Console依赖于底层平台和JVM如何被调用.如果JVM是在交互式命令行(比如Windows的cmd)中启动的,并且输入输出没有重定向到另外的地方,那么就可以得到一个可用的Console实例。在使用IDE的情况下,是无法获取到Console实例的,原因在于在IDE的环境下,重新定向了标准输入和输出流,也是就是将系统控制台上的输入输出重定向到了IDE的控制台中publicclassTestConsole3{publicstaticvoidmain(String[]args){Stringstr=readDataFromConsole("Pleaseinputstring:");System.out.println("Theinformationfromconsole:"+str);}/***Usejava.io.consoletoreaddatafromconsole**@paramprompt**@returninputstring*/privatestaticStringreadDataFromConsole(Stringprompt){Consoleconsole=System.console();if(console==null){thrownewIllegalStateException("Consoleisnotavailable!");}returnconsole.readLine(prompt);}}[/code]
Console类还有个特色就是,专门对密码(输入无回显)等安全字符,进行了处理。专门提供readPassword()方法,具体应用见如下代码:
publicclassTestConsole5{publicstaticvoidmain(String[]args){Consoleconsole=System.console();if(console==null){thrownewIllegalStateException("Consoleisnotavailable!");}while(true){Stringusername=console.readLine("Username:");char[]password=console.readPassword("Password:");if(username.equals("Chris")&&String.valueOf(password).equals("GoHead")){console.printf("WelcometoJavaApplication%1$s.\n",username);//使用后应立即将数组清空,以减少其在内存中占用的时间,增强安全性password=null;System.exit(-1);}else{console.printf("Invalidusernameorpassword.\n");}}}}[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: