这里记录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从控制台读入数据的几种方法总结的全部内容了,希望对大家有所帮助,多多支持脚本之家~

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

  1. java 不知道类名_Java 中获取类名的三种方法,你知道几种?

    之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里 ...

  2. java文件拷贝_Java实现文件拷贝的4种方法

    第一种方法:古老的方式 public static long forJava(File f1,File f2) throws Exception{ long time=new Date().getTi ...

  3. java保留小数_java保留两位小数4种方法

    java保留两位小数4种方法 方法一:String的format方法(推荐) double f = 111231.5585; System.out.println(String.format(&quo ...

  4. java获取文件大小_Java实现获取文件大小的几种方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 目前Java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.i ...

  5. java时间代码_java获取当前时间的四种方法代码实例

    这篇文章主要介绍了java获取当前时间的四种方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 第一种:Date类 public class ...

  6. java当前时间_java 获取当前时间的三种方法

    总结java里面关于获取当前时间的一些方法 System.currentTimeMillis() 获取标准时间可以通过System.currentTimeMillis()方法获取,此方法不受时区影响, ...

  7. java 取名字_Java 中获取类名的三种方法,你知道几种?

    之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName()返回的是虚拟机里面 ...

  8. java 复制文件_Java中复制文件的4种方法

    Java拷贝文件是一种非常常见的操作.但是java.io.File类没有任何快捷方法可以将文件从源复制到目标文件.在这里,我们将了解学习可以在java中复制文件的四种不同方法. 方法一:使用Strea ...

  9. java 获取类名_Java中获取类名的3种方法!

    获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里面的class的类名表现形式. getCanonicalName() 返回的是更容易理解的类名表示. g ...

  10. java 当前类_Java获取当前类名的两种方法

    适用于非静态方法:this.getClass().getName() 适用于静态方法:Thread.currentThread().getStackTrace()[1].getClassName() ...

最新文章

  1. 9月16号晚上,Asuka有一场关于Windows 7组策略的Webcast,欢迎兄弟们来捧场
  2. 苹果大战FBI将加速科技圈的加密技术发展?
  3. codevs1688 求逆序对(权值线段树)
  4. MyBatis ofType和javaType区别
  5. 【Tools】Centos7.5安装MySQL5.7
  6. 一个具体的例子学习SAP S/4HANA里Fiori应用的排错分析
  7. 第二十一期:老大难的GC原理及调优,这全说清楚了
  8. Spring Boot文档阅读笔记-DataSource configuration
  9. iphone9发布_【60秒半导体新闻】消息称国外疫情爆发让苹果取消发布会 iPhone 9跳票/华为P40全家福:7种配色、陶瓷尊享版配豪华五摄...
  10. linux android studio 快捷方式,Android studio中的代码格式化快捷方式
  11. 局域网远程yum源制作
  12. EBay架构案例分析
  13. ARM处理器寄存器和汇编指令系统
  14. axis wsdl2java_AXIS1.4 客户端 wsdl2java 使用方法
  15. Python常用模块 之 hashlib模块
  16. Mac 配置L2TP 隧道连接操作步骤
  17. 推荐电影 历届奥斯卡获奖影片 1971-2008
  18. 趣谈win10常用快捷键
  19. 小白怎么学习云计算?2020最新云计算学习路线图
  20. 未来必将是AI的天下

热门文章

  1. Nacos2.0的K8s服务发现生态应用及规划
  2. 成功通航:用宜搭提升数字化管理效能,确保每次飞行任务安全执行
  3. 技术干货 | 深度解构 Android 应用面临紧急发版时的救星方案:mPaaS 热修复——DexPatch
  4. 淘宝直播在冲刺最复杂的人工智能技术!
  5. Serverless的初心、现状和未来
  6. 云服务器ECS共享标准型S6全新发布, 行业内最具性价比
  7. 《阿里巴巴Android开发手册》正式发布,献给移动开发者的新年礼物
  8. Veeam 发布 2022 年数据保护趋势报告,开发者需关注哪些点?
  9. 拥抱创新二十载,微软“创新杯”持续孵化中国青年开发者智慧创意
  10. 融云任杰:强互动,RTC下一个“爆点”场景|拟合