java 读取控制台_Java从控制台读入数据的几种方法总结

这里记录Java中从控制台读入信息的几种方式,已备后查!

(1)JDK 1.4(JDK 1.5和JDK 1.6也都兼容这种方法)

public class TestConsole1 {

public static void main(String[] args) {

String str = readDataFromConsole("Please input string:);

System.out.println("The information from console: + str);

}

/**

* Use InputStreamReader and System.in to read data from console

*

* @param prompt

*

* @return input string

*/

private static String readDataFromConsole(String prompt) {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String str = null;

try {

System.out.print(prompt);

str = br.readLine();

} catch (IOException e) {

e.printStackTrace();

}

return str;

}

}

(2)JDK 1.5(利用Scanner进行读取)

public class TestConsole2 {

public static void main(String[] args) {

String str = readDataFromConsole("Please input string:");

System.out.println("The information from console:" + str);

}

/**

* Use java.util.Scanner to read data from console

*

* @param prompt

*

* @return input string

*/

private static String readDataFromConsole(String prompt) {

Scanner scanner = new Scanner(System.in);

System.out.print(prompt);

return scanner.nextLine();

}

}

Scanner还可以很方便的扫描文件,读取里面的信息并转换成你要的类型,比如对“2 2.2 3.3 3.33 4.5 done”这样的数据求和,见如下代码:

public class TestConsole4 {

public static void main(String[] args) throws IOException {

FileWriter fw = new FileWriter("num.txt");

fw.write("2 2.2 3.3 3.33 4.5 done");

fw.close();

System.out.println("Sum is "+scanFileForSum("num.txt"));

}

public static double scanFileForSum(String fileName) throws IOException {

double sum = 0.0;

FileReader fr = null;

try {

fr = new FileReader(fileName);

Scanner scanner = new Scanner(fr);

while (scanner.hasNext()) {

if (scanner.hasNextDouble()) {

sum = sum + scanner.nextDouble();

} else {

String str = scanner.next();

if (str.equals("done")) {

break;

} else {

throw new RuntimeException("File Format is wrong!");

}

}

}

} catch (FileNotFoundException e) {

throw new RuntimeException("File " + fileName + " not found!");

} finally {

if (fr != null)

fr.close();

}

return sum;

}

}

(3)JDK 1.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 的控制台中

public class TestConsole3 {

public static void main(String[] args) {

String str = readDataFromConsole("Please input string:");

System.out.println("The information from console:" + str);

}

/**

* Use java.io.console to read data from console

*

* @param prompt

*

* @return input string

*/

private static String readDataFromConsole(String prompt) {

Console console = System.console();

if (console == null) {

throw new IllegalStateException("Console is not available!");

}

return console.readLine(prompt);

}

}

Console类还有个特色就是,专门对密码(输入无回显)等安全字符,进行了处理。专门提供 readPassword()方法,具体应用见如下代码:

public class TestConsole5 {

public static void main(String[] args) {

Console console = System.console();

if (console == null) {

throw new IllegalStateException("Console is not available!");

}

while(true){

String username = console.readLine("Username: ");

char[] password = console.readPassword("Password: ");

if (username.equals("Chris") && String.valueOf(password).equals("GoHead")) {

console.printf("Welcome to Java Application %1$s.\n", username);

// 使用后应立即将数组清空,以减少其在内存中占用的时间,增强安全性

password = null;

System.exit(-1);

}

else {

console.printf("Invalid username or password.\n");

}

}

}

}

以上就是小编为大家带来的Java从控制台读入数据的几种方法总结的全部内容了,希望对大家有所帮助,多多支持脚本之家~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通用智能传感集线器(Sensorhub)介绍

摘要:   智能传感集线器,也称之为Sensor hub,是一种基于低功耗MCU和轻量级RTOS操作系统之上的软硬件结合的解决方案,其主要功能是连接并处理来自各种传感器设备的数据。 点此查看原文:http://click.aliyun.com/m/405…

第13篇: Flowable-BPMN操作流程之流程进展查看之流程图

接上一篇: 第12篇:Flowable-BPMN操作流程之用户任务UserTask https://blog.csdn.net/weixin_40816738/article/details/102902596 文章目录一、背景二、原理三、实现方案3.1. 流程是否完成功能3.2. 完成流程图3.3. 控制器入口四、验证测试4.1. 创建流程4…

阿里云MaxCompute,用计算力让数据发声

摘要: 计算的价值绝不止计算本身,而是让本不会说话的数据发声。 从玛雅历法到圆周率,从万有引力定律到二进制,从固化的物体到虚拟的思维都由数据注入。阿里云大数据计算服务MaxCompute以技术驱动产品,用计算力让数据发…

命令行编译java项目_命令行编译运行java工程(转)

平时建立Java工程都是借助eclipse或intellij这些ide编辑器来构建,对于java工程的实际编译执行原理,从未了解过。作为一个曾经的C程序员,对于源码刨根问底的那份执着从未丢过。于是今天就写了这样的一个例子进行测试。1.首先建立个跟目录MyJav…

面试鹅厂,我三面被虐的体无完肤……

戳蓝字“CSDN云计算”关注我们哦!作者 | codegoose来源 | https://segmentfault.com/a/1190000017864721经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于重拾面试信心,再次出征。鹅厂面试职位:go…

阿里云MaxCompute印度开服,加速大数据产业升级

摘要: 2018年1月18日,阿里云大数据计算服务MaxCompute将在印度正式开服。通过MaxCompute强大的计算能力,阿里云将加速印度大数据产业的全面升级。 点此查看原文:http://click.aliyun.com/m/40728/ 2018年1月18日,阿里云…

第14篇:Flowable-BPMN操作流程之任务完成

接上一篇: 第13篇: Flowable-BPMN操作流程之流程进展查看之流程图 https://blog.csdn.net/weixin_40816738/article/details/102902629 文章目录一、背景二、原理三、API3.1. 直接完成任务3.2. 完成任务并且设置任务参数四、实现4.1. 接口4.2. 接口实现4…

java垃圾回收 分代_Java分代垃圾回收策略原理详解

一、为什么要分代分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。在Java程序运行的过程中,会产生大量的对象,…

MaxCompute Studio使用心得系列6——一个工具完成整个Python UDF开发

摘要: 2017/12/20 北京云栖大会上阿里云MaxCompute发布了最新的功能Python UDF,万众期待的功能终于支持啦,我怎么能不一试为快,今天就分享如何通过Studio进行Python udf开发。 点此查看原文:http://click.aliyun.com/m…

如何填报大数据相关专业? | Alfred数据室

戳蓝字“CSDN云计算”关注我们哦!作者 | AlfredWu来源 | Alfred数据室高考出分了,又是一年一度各位考生和家长手忙脚乱开始填报志愿的时候了。很多考生和家长纷纷咨询Alfred:大数据现在不是很火吗?大数据专业怎么样呀&#xff1f…

第15篇: Flowable-BPMN操作流程之排他网关

接上一篇: 第14篇:Flowable-BPMN操作流程之任务完成 https://blog.csdn.net/weixin_40816738/article/details/102902647 文章目录一、背景二、定义三、流程准备四、流程文件五、控制器六、流程通过验证6.1. 创建新流程6.2. 启动流程6.3. 控制台查看任务…

阿里云视频AI全能力解读

摘要: 结合人工智能视频理解流程和用户的需求场景,我们将视频AI的功能分成四个大部分,视频智能审核、视频内容理解、视频智能编辑、视频版权保护。其中视频审核功能包括视频鉴黄、暴恐涉政识别、广告二维码识别、无意义直播识别等&#xff0c…

java string 日期_java string类型日期比较

先转成date类型。再比较String nowDate_String ut.getDate();String endDate_String ie.getCertiEndDate();SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd");Date nowDate_Date sdf.parse(nowDate_String);Date endDate_Date sdf.parse(endDate_Strin…

阿里云智能视频 AI 重装来袭

摘要: 近日,阿里云重磅推出视频点播新功能——视频AI ,基于深度学习、计算机视觉技术和海量数据,为广大用户提供多场景的视频AI服务。 点此查看原文:http://click.aliyun.com/m/40809/ 近日,阿里云重磅推出…

Hadoop精华问答 | Hadoop框架中最核心的设计是什么?

Hadoop能够进行大批量数据的离线处理,但是在实时计算上的表现实在是不尽如人意;而Storm就可以担当这部分的角色,今天,就让我们看看关于Storm的精华问答吧。1Q:hadoop发展史A:2Q:Hadoop 有哪些优点?A&#x…

SpringBoot2.x整合Swagger2 实现API文档实时生成

我们提供Restful接口的时候,API文档是尤为的重要,它承载着对接口的定义,描述等,本文主要介绍了SpringBoot集成Swagger2生成接口文档的方法示例,需要的朋友们下面随着小编来一起学习学习吧 我们提供Restful接口的时候&a…

阿里云 ESS 弹性伸缩服务新功能来袭,更全面、更自动化的使用体验

摘要: 2017年9月阿里云弹性伸缩服务伸缩配置新增了实例自定义数据、秘钥对、实例RAM角色、标签新特性;近日,阿里云又发布了VSWitchIds.N多可用区新特性。 点此查看原文:http://click.aliyun.com/m/40810/ 弹性伸缩是一种根据业务需…

java 提取轮廓_TensorFlow 卷积操作模拟sobel算子提取图像轮廓

注意:sobel算子不保证结果在0-255,需要做一次归一化处理,再乘以255输出的数据shape与图像的shape不一样,需要一次转化效果代码import matplotlib.pyplot as plt # plt 用于显示图片import matplotlib.image as mpimg # mpimg 用于…

阿里云MaxCompute(大数据)公开数据集---带你玩转人工智能

摘要: 目前阿里云大数据产品已经免费向全部用户开放了多种公用数据集。开放的数据类别包括:股票价格数据,房产信息,影视及其票房数据。 点此查看原文:http://click.aliyun.com/m/40813/ 目前阿里云MaxCompute大数据产品…

Git添加为远程仓库

#通过git init命令把这个目录变成Git可以管理的仓库 git init #把该目录下的所有文件添加的暂存区 git add . # 把暂存区的文件提交到本地仓库 git commit #关联一个远程库 git remote add origin 仓库url#推送远程 git push -u origin master