11.3.2 读取控制台输入
前面介绍了使用IO类实现文件读写的示例,其实在很多地方还需要使用到IO类,这里再以读取控制台输入为例子来介绍IO类的使用。
控制台(Console)指无图形界面的程序,运行时显示或输入数据的位置,前面的介绍中可以使用System.out.println将需要输出的内容显示到控制台,本部分将介绍如何接受用户在控制台中的输入。
使用控制台输入是用户在程序运行时和程序进行交互的一种基础手段,这种手段是Windows操作系统出现以前,操作系统位于DOS时代时,用户和程序交互的主要手段。当然,现在这种交互的方式已经被图形界面(GUI)程序取代了。
在读取控制台操作中,操作系统在用户在控制台输入内容,并按回车键提交以后,将用户提交的内容传递给Java运行时系统,Java运行时系统将用户输入的信息构造成一个输入流对象——System.in,在程序员读取控制台输入时,只需要从该流中读取数据即可。至于构造流System.in的过程对于程序员来说是透明的。
查阅JDK API可以发现,System类中的静态属性in是InputStream类型的对象,可以按照输入流的读取方法读取即可。
下面的示例代码实现了输入“回显”的功能,即将用户输入的内容重新显示到控制台,示例代码如下:
/**
* 读取控制台输入,并将输入的内容显示到控制台
*/
public class ReadConsole1 {
public static void main(String[] args) {
try{
//提示信息
System.out.println("请输入:");
//数组缓冲
byte[] b = new byte[1024];
//读取数据
int n = System.in.read(b);
//转换为字符串
String s = new String(b,0,n);
//回显内容
System.out.println("输入内容为:" + s);
}catch(Exception e){}
}
}
在该示例代码中,从System.in中读取出用户的输入,然后将用户输入的内容转换为字符串s,然后输出该字符串的内容即可。
下面实现一个简单的逻辑,功能为:回显用户在控制台输入的内容,当用户输入quit时程序运行结束。实现的代码如下:
/**
* 读取控制台输入
* 循环回显内容,当输入quit时退出程序
*/
public class ReadConsole2 {
public static void main(String[] args) {
//数组缓冲
byte[] b = new byte[1024];
//有效数据个数
int n = 0;
try{
while(true){
//提示信息
System.out.println("请输入:");
//读取数据
n = System.in.read(b);
//转换为字符串
String s = new String(b,0,n - 2);
//判断是否是quit
if(s.equalsIgnoreCase("quit")){
break; //结束循环
}
//回显内容
System.out.println("输入内容为:" + s);
}
}catch(Exception e){}
}
}