java 字符终端库_Java 字符终端上获取输入三种的方式分享
在java 字符终端上获取输入有三种方式:
1、java.lang.system.in (目前jdk版本均支持)
2、java.util.scanner (jdk版本>=1.5)
3、java.io.console(jdk版本>=1.6),特色:能不回显密码字符
参考:
这里记录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 base64 编码 类_java base64编码和解码的三种方式 | 学步园
方式一:使用commons-codec.jar /** * @param bytes * @return */ public static byte[] decode(final byte[] byt ...
- 在linux上MySQL的三种安装方式
安装MySQL的方式常见的有三种: 方式一:rpm安装 (1) 操作系统发行商提供的 (2) MySQL官方提供的(版本更新,修复了更多常见BUG)www.mysql.com/downloads 关于 ...
- java 动态行转列_行转列的三种实现方式
上次项目中,碰到了需要将取出的数据进行行转列的操作,然后显示出来的问题,当时是吧这个问题交给了前端小姐姐,麻烦她来处理了,但是后来抽空自己研究了一下,发现其实有三种实现方式,下面直接上代码一一说明,以 ...
- java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...
java中数组的三种定义方式 java中,数组是一种很常用的工具,今天我们来说说数组怎么定义 [java] view plain copy /** * 数组的三种定义方法 * 1.数组类型[] 数组名 ...
- java如何实现定时任务_Java定时任务的三种实现方式
前言 现代的应用程序早已不是以前的那些由简单的增删改查拼凑而成的程序了,高复杂性早已是标配,而任务的定时调度与执行也是对程序的基本要求了. 很多业务需求的实现都离不开定时任务,例如,每月一号,移动将清 ...
- 文件上传的三种方式-Java
前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...
- java中map的遍历方法_Java中Map的三种遍历方式
集合中的三种遍历方式,如下代码: import java.util.Collection; import java.util.HashMap; import java.util.Iterator; i ...
- java源代码实例倒计时_Java倒计时三种实现方式代码实例
写完js倒计时,突然想用java实现倒计时,写了三种实现方式 一:设置时长的倒计时: 二:设置时间戳的倒计时: 三:使用java.util.Timer类实现的时间戳倒计时 代码如下: package ...
- java倒计时_Java倒计时三种实现方式代码实例
写完js倒计时,突然想用java实现倒计时,写了三种实现方式 一:设置时长的倒计时: 二:设置时间戳的倒计时: 三:使用java.util.Timer类实现的时间戳倒计时 代码如下: package ...
最新文章
- android 打卡动画,android音视频打卡(-)3种方法绘制图片
- Python进阶7——字典与集合
- Ecplise切换项目里面的包的显示样式
- [*leetcode 5] Longest Palindromic Substring
- 海马苹果助手ipad版_iOS逆向-ipa包重签名及非越狱手机安装多个微信!
- jQuery 结构分析
- Windows Server 2012之ISCSI目标服务器群集
- 在开启kerberos 后,hbase存在数据命名空间的问题(解决方案)
- HBase 完全分布式的安装
- 父游标、子游标及共享游标
- Python学习笔记(语句)
- opencv之图片处理看这一篇就够了(一)
- 华为是怎样研发的(12)——FMEA分析
- PHP之抖音无水印解析源码
- 一山不容二虎?双动力同步驱动技术与模型分享
- 写一个简单的校园网多拨思路
- 强连通分量分解详解 超级详细
- 电子电路:差分放大器分析
- 雅思做题技巧误区一,不敢选TRUE。误区二,见到only或must等绝对词就选FALSE。误区三,找不到就选NOT GIVEN。误区四,喜欢把TRUE/FALSE/NOT GIVEN理解为
- 创新指南|如何以STEPPS模型6招打造病毒式传播产品