java的数据输入从控制台输入数据.doc
文本预览下载声明
java的数据输入:从控制台输入数据
Java(GUI),其作用有二:一是输入数据,二是显示输出结果。通过在控制台的输入输出,就使用户能完成配置、监视、维护和故障排除等工作。
Java控制台虚拟机是否具有控制台取决于底层平台,还取决于调用虚拟机的方式。如果虚拟机从一个交互式命令行开始启动,且没有重定向标准输入和输出流,那么其控制台将存在,并且通常连接到键盘并从虚拟机启动的地方显示。如果虚拟机是自动启动的,例如由后台作业调度程序启动,那么它通常没有控制台。
因此,对于普通微机里的java虚拟机来说,通常控制台就是指的显示器和键盘,即:用显示器输出结果、用键盘输入数据。由于输出相对比较简单,这里主要讨论输入数据的方式。
从控制台输入数据的方式有多种,jdk1.4以前主要是使用标准输入流的方式,jdk5.0增加了使用Scanner类的方式,jdk6.0又增加了使用Console类的方式。
7.8.1 使用标准输入流的方式
标准输入流在7.6.2中已经讨论过,例7-13和例7-14的数据就是从控制台(键盘)输入的,办法很简单,即使用标准输入流System.in获得。也可以将System.in桥接至字符流,从字符流中读入数据。
?
例7-22文件复制程序,本例中先使用InputStreamReader获取标准输入流System.in,再用字符流BufferedReader包装InputStreamReader,以读取源文件名和目标文件名。
1:????? ?
import java.io.*;
2:牋牋?imp?
public class Example7_22 {
3:牋牋?pub?
public static void main(String[ ] args) {
4:牋牋? ?
try {
5:牋牋? ?
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
6:牋牋? ?
String srcFile = null, dstFile = null;
7:牋牋? ?
System.out.print(请输入源文件名:);
8:????? ?
srcFile = br.readLine(); //用缓冲字符流获得源文件名
9:????? ?
System.out.print(请输入目标文件名:);
10:?? ?
dstFile = br.readLine(); //用缓冲字符流获得目标文件名
11:?? ?
byte[ ] data=new byte[1];
12:?? ?
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
13:牋
?
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dstFile));
14:牋
?
while(bis.read(data) != -1) bos.write(data);
15:牋
?
bos.flush();
16:牋
?
System.out.println(文件复制成功!);
17:?? ?
bis.close();
18:?? ?
bos.close();
19:?? ?
}catch(IOException e){
20:?? ?
e.printStackTrace();
21:?? ?
}
22:?? ?
}
23:?? ?
}
?
可见利用标准输入流进行控制台输入的方式非常麻烦:如果从键盘获取的是字符串,需要采用BufferedReader类来进行处理;如果获取的是其他类型数据,需要手工进行转换;在读取的过程中还必须捕获IOException。不过这是JDK1.4及更早版本中从控制台读取数据唯一办法。
7.8.2 使用Scanner类的方式
从JDK5.0开始,java.util包中增加了Scanner类,它是一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。Scanner类从字面上讲是“扫描”的意思,它把给定的字符串解析成Java的各种基本数据类型,用于分解字符串的默认的分隔符是空格,也可以定制。其构造方法如表7-15。
?
?
表7-15
显示全部