已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计课程定做 QQ1714879127 本科学年论文(设计)题目: Java控制台输入方法比较 摘 要从控制台获取数据,是一般控制台应用程序经常需要实现的一种基本功能。是一般控制台应用程序经常需要实现的一种基本功能。可以利用JDK提供的System.in、Scanner、Console等类完成功能的设计,三种不同的方法各有优缺点,在具体使用时可以根据实际情况进行合理选择。关键词:Java;控制台;数据获取;类Java Console Data Capture Methods and ComparisonAbstract: Data capturing from console is a basic function frequently applied in normal console applications,and this function can be implemented by of the following classes afforded by JDK:Ststem.in,Scanner,Console.The three three diffenent methodswill have their own advantages.In the real application,the most suitable method can be chose based on the specific requirements from this application.Key Words:Java;Console;Data capturing;class1引言Java程序获取外部数据的方式很多,很多时候要人机交互,这就要用到最基本的控制台输入输出方式。从控制台获取程序运行中需要的数据,是一般控制台应用程序经常需要实现的功能。也是人机交互最基本的实现方式。为了实现程序的灵活性,有的数据不能在程序中提前指定,那么就需要借助控制台在程序运行时获取所需要的数据,从而实现按用户指定参数执行的目标。总之输入数据是一个比较常用的功能,在JDK5.0以前的版本中的输入是比较复杂的;需要手工处理系统的输入流(比如字节包装成字符,字符包装成字符串等)。从JDK5.0版本开始,从控制台中输入数据的方法每增加一个版本号,就新增一种方法这给控制台输入带来了很大的方便,但这样也增加了选择的种类,程序员可以依据不同的要求来进行输入方式的选择。2 获取数据 从控制台获取数据是一般控制台应用程序经常需要实现的一种基本功能。以下就介绍三类控制台输入数据的方法:21使用systemin类JDK14及以下的版本中要实现从控制台中输入数据,只有一种办法,即使用Systemin获得系统的输入流,再桥接至字符流,从字符流中读人数据。示例代码如下:import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class SystemTest public static void main(String args)System.out.println(使用System.in方法输入字串);String str=”;BufferedReader buf=new BufferedReader(new InputStreamReader(System.in);try str=buf.readLine(); catch (IOException e) e.printStackTrace();从上面的代码段来看这种控制台输入的方法非常麻烦,为了能读取整行的数据,需要采用BufferedReader类和InputStreamReader类来进行包装处理,而且在读取的过程中还需要捕获IOException异常,不过这是JDK14及以下版本从控制台读取数据的唯一办法。2.2 使用Scanner类从JDK5.0开始,基本类库中增加了java.util.Scanner类,根据它的API文档说明,这个类是采用正则表达式进行基本类型和字符串分析的文本扫描器。使用它的Scanner(InputStream source)构造方法,也可以传入系统的输入流System.in而从控制台中读取数据。示例代码如下:import java.util.Scanner;public class ScannerTest public static void main(String args)System.out.println(使用Scanner方法输入字符串);Scanner sc=new Scanner(System.in);String strTemp=”;strTemp=sc.nextLine();从代码量上来看,2.2比2.1少了大量的代码,核心代码只有两行。其实并不是Scanner类将控制台输入给简单化了,在其内部的实现中已经将IOException处理了,而且采用InputStrearaReader来一个字符一个字符进行扫描读取的,只是Scanner类做了更高层次的封装。2.3 使用Console类实现数据输入从JDK1.6开始,基本类库中增加了Java.io.Console类,用于获得与当前Java虚拟机关联的基于字符的控制台设备。在纯字符的控制台界面下,可以更加方便地读取数据。示例代码如下:importjavaioConsole;importjavautilScanner;public class ConsoleTestpublic stafic void main(String args)String str=readStringC请输入字符串:”);Systemoutprintln(“readString方法的输入:”+str);Private static StringreadString (String prompt)Consoleconsole=SystemConsole();if(console=null)throw new M=IllegalStateException(“不能使用控制台”);return console.readLine(prompt);在21中,输入数据前的提示信息需要使用System.out.print0;来输出,但是使用Console的2.3类,可以在方法参数中直接放入提示信息。如果需要在控制台中输入密码等敏感信息,像在浏览器或者是应用程序中那样显示替代字符的话,在JDK 50以前做法是相当麻烦的,而使用Console类的readPassword0方法可以在控制台上不回显输入密码,并将密码结果保存在char数组中,根据API文档的建议,在使用后立即将数组清空,以减少其在内存中占用的时间,以便增强安全性。示例代码如下:import java.io.Console;public class aaapublic static void main(String args) Console console=System.console(); System.out.println(请输入密码:); char passwd; passwd=console.readPassword(密码:,new Object0); System.out.println(passwd);3 比较使用上面的几种不同的方法,从控制台获取数据,有如下优缺点:使用Systemin类读取数据的用代码实现起来比较复杂,也很容易出错,最大的缺点是只能读取字符串,而不能读取其它类型的数据,若需要其他的类型的数据,必须手工进行转换。使用Scanner类不仅可以从控制台中读人字符串,还可以读入除char之外的其他七种基本类型和两个大数字类型,并不需要手工进行转换。Scanner不单单是只能扫描控制台中输入的字符,它还可以让读人的字符串匹配一定的正则表达式模式,如果不匹配时将抛出InputMismatchException异常。使用Systemin作为它的构造参数时,它不只扫描了系统输入中的字符,它还可以从文件或者是字符串中扫描分析字符串。使用Console类获取控制台数据时,也有一些缺点。根据ConsoleAPl文档的说明:虚拟机是否具有控制台取决于底层平台,还取决于调用虚拟机的方式。如果虚拟机从一个交互式命令行开始启动,且没有重定向标准输入和输出流,那么其控制台将存在。并且通常连接到键盘并从虚拟机启动的地方显示。如果虚拟机是自动启动的(例如,由后台作业调度程序启动),那么它通常没有控制台。通过上面的文档说明可以看出,在使用IDE的情况下,是无法获取到Console实例的,这是由于IDE的环境下,重新定向了标准输入和输出流,也是就是将系统控制台上的输入输出定向到了IDE的控制台中。因此,在IDE中不能使用这个程序,而21就没有这种限制。4 总结以上对Java语言中各种版本从控制台获取数据的方法进行了详细介绍,并对不同方法的优缺点进行了分析。一般时候,在使用JRE 14或以下版本的情况下,没得选择只能采用21类提供的方法;使用JRE 50的情况下,建议使用基于Scanner的22类提供的方法,可以更方便地进行数据读取;使用JRE60的情况,并且只在字符界面的控制台
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临时占用土地租赁协议
- 快件赊销协议书
- 2024建设工程补充合同范本
- 求职意向书样本-书信范本
- 2024幼儿园保安聘用合同
- 劳务施工安全协议书范本2024年
- 浙江省初中名校七年级上学期语文期中试卷5套【附答案】
- 吉林省杂粮采购合同
- 4.1 夯实法治基础 (大单元教学设计) 2024-2025学年统编版道德与法治九年级上册
- 家庭雇佣保姆合同模板
- 煤矿皮带智能化集控系统PPT教学讲授课件
- 个人财务管理系统的设计与实现--论文
- 分数乘除法整理复习(课堂PPT)
- 杭州会展业发展与对策研究文献综述
- 小学六年级英语上册《Unit 1 How can I get there》教案
- 完整版方法验证报告模板最终
- 电力管道资料表格(共30页)
- 大班科学活动教案《豆豆家族》含PPT课件
- 【精品试卷】部编人教版(统编)一年级上册语文第一单元测试卷含答案
- 金属有机化学ppt课件
- 数学说题稿(共4页)
评论
0/150
提交评论