0 引言 f u, H8 Z* M& }% F% r2 Y
从控制台中读取数据是一个比较常用的功能,在 JDK 5.0 以前的版本中的实现是比较复杂的,需要手工处理系统的输入流。有意思的是,从 JDK 5.0 版本开始,能从控制台中输入数据的方法每增加一个版本号,就有一种新增的方法,这也增加了选择的种类,可以依据不同的要求来进行选择。下面来看一下,各个版本中如何从控制台中读取数据以及各自的优缺点。5 ]4 `7 L4 }; m0 n9 K' T
1 JDK 1.4 及以下版本读取的方法1 X4 o' O, D1 o: y( @
JDK 1.4 及以下的版本中要想从控制台中输入数据只有一种办法,即使用System.in获得系统的输入流,再桥接至字符流从字符流中读入数据。示例代码如下:
# q" Z0 O) g$ U& |( L, @ import java.io.IOException;/ [! @7 r/ C2 Q; }- A
import java.io.InputStreamReader;
( |( P9 \; l9 ~; |$ \' F' l; B4 s public class Test1 {$ I/ C9 U+ ]4 [$ g6 ]$ x1 R3 T
public static void main(String[] args) {0 e" ^8 E2 m' ^' A; ?7 T& Z7 Z/ j
String str = readString("请输入字符串:");* C" Z+ @; D5 d' \8 k+ j
System.out.println("readString 方法的输入:" + str);
, T) r( @2 G9 \ }
# ?: ]% `' ?. i0 q /*** T7 d( j5 V$ M6 ]- g9 {
* 使用系统的输入流,从控制台中读取数据1 y8 [/ t P4 j! E6 l7 I
( X3 q; r8 t; a( u- q( a * 用于所用的JDK版本5 F1 i# \8 ?7 q9 J
* @param prompt 提示信息9 i8 K& D5 Y- i- t/ ^
* @return 输入的字符串
9 a8 L4 ?4 _# w* r. `% ] */
* y! p# m0 X( _3 b private static String readString(String prompt) { J3 M9 E5 k. W' y
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));0 [4 C0 m0 s/ S
String str = null;
7 v& O, A% _5 C0 r$ U% w try {
7 }" a* O1 U: S, g8 P" g System.out.print(prompt);
* S4 l3 z+ K& q6 d: I str = br.readLine();
3 J, f7 {& K% H6 f0 d; L9 ] } catch (IOException e) {
4 H( g" v7 h/ W" |7 K e.printStackTrace();( @6 M3 Z( ~6 `' H/ |
}
/ e9 |# |2 }8 }% V$ v; ?5 L return str;
( v4 R" @1 M, j6 o9 C6 u" N1 w/ [ }
: r0 U1 x7 F c5 W. Y I( w$ s+ \2 R$ J }; r, ]5 `+ N$ ~6 u U
从上面的代码段来看,这种控制台输入的方法非常地麻烦,为了能读取整行的数据,采用了BufferedReader类来进行处理,而且在读取的过程中还需要捕获IOException.不过这是 JDK 1.4 及以下版本中从控制台读取数据唯一的办法。还有一种非控制台读入数据的办法,就是采用 Swing 中的JOptionPane,会弹出一个非常漂亮的输入对话框让使用者输入数据,但这是一种比较另类的做法,不推荐使用。
5 K7 q7 a7 ]) a; F import javax.swing.JOptionPane;1 u# v5 ~. P7 S- [1 q- J! p( O
public class Test2 {
" `# P+ }# w1 B! g- h public static void main(String[] args) {
- S; J/ m1 w1 L. ] String str = readStringFromDialog("请输入字符串:");
$ i% S* f' t9 x3 x6 C r System.out.println("readStringFromDialog 方法的输入:" + str);
' q0 ~- p( m: R+ a! |) D1 K }" `0 w" l0 |- W3 P
/**
% n+ a5 {7 R; Y1 m5 u/ h/ g6 b0 N * 使用JOptionPane的输入对话框,输入字符串* u, `5 C* C- _9 s( [3 J* y( }
: y* i# I Y9 d# T$ I# [* X& t1 _2 ?
* 用于所用的JDK版本
& x& M& X: u' M0 n$ N4 M; D& h * @param prompt 提示信息0 }( V9 W: ~$ }3 _
* @return 输入的字符串% t- \* b1 F$ y: w9 C
*/* R6 [, J+ P* R3 E4 H( i# i# v
private static String readStringFromDialog(String prompt) {( _& n G9 \) r6 A4 Z+ ^4 H
return JOptionPane.showInputDialog(prompt);- n9 n7 \& K7 T, p% d1 v# Y. W
}
" R; K/ x6 _/ x2 q: F$ s }
4 O' z& w. h6 `- b9 ?; H 上面的两种方法都有个共同的缺点--只能读取字符串,若需要读取其他类型的数据需要手工进行转换。 |