您的位置:首页 > 编程语言 > Java开发

JavaStep --- 3. 读取输入

2015-08-08 23:24 375 查看
在Java中,向控制台输出内容很容易,只要通过如下语句就可以在控制台输出内容
System.out.println("This is test text!");

如果要想在控制台获取输入,在Java中,必须先创建一个Scanner(JDK >= 1.5)对象,并将之与标准输入流相关联
Scanner in = new Scanner(System.in);
String name = in.nextLine();

注意:Scanner不止有nextLine方法,还有next、nextInt、nextDouble等方法。

下面的程序为使用Scanner在控制台读取输入的例子
import java.util.*;
/ **
* This program is console input
* @author keyman
* @version 1.0.0 2015-8-8
*
*/

public class InputTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

String name = "";
int age = 0;

System.out.print("what's your name? ");
Scanner in = new Scanner(System.in);
name = in.nextLine();

System.out.print("how old are you? ");
age = in.nextInt();

System.out.println("hello, "+name+". next year, you'll be "+(age + 1));
}
}
************************此处为程序运行的情况*************************************
what's your name? keyman
how old are you? 20
hello, keyman. next year, you'll be 21
*********************************************************************************

说明:Scanner有时候还是很方便的,例如如下例子就是使用Scanner从文件读取输入
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
/**
* This program is console input
* @author keyman
* @version 1.0.0 2015-8-8
*
*/

public class InputTest {
/**
* @param args
*/
public static void main(String[] args) {
//此段代码为向c:\\console.txt中写入内容
try{
FileWriter filewriter = new FileWriter("c:\\console.txt");
filewriter.write("1 2 3 4 5 6 7 8 9 last, 这是我的测试文本。");
filewriter.close();
}catch(IOException e)
{
System.out.println("file console.txt write is exception...");
}

//此段代码为从c:\\console.txt读取内容并输出
FileReader filereader = null;
try {
filereader = new FileReader("c:\\console.txt");
Scanner scanner = new Scanner(filereader);

while (scanner.hasNext()) {
System.out.print(scanner.next());
}
} catch (FileNotFoundException e) {
throw new RuntimeException("File " + "c:\\console.txt" + " not found!");
} finally {
if (filereader != null)
try {
filereader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}


不难看出,以上从控制台读取输入可以实现,但是全是明文,不适合输入密码等信息。在JDK1.6引入Console类来实现在控制台输入密码的需求

注意:不总是能得到可用的Console, 一个JVM是否有可用的Console依赖于底层平台和JVM如何被调用.

如果JVM是在交互式命令行(比如Windows的cmd)中启动的,并且输入输出没有重定向到另外的地
方,那么就可以得到一个可用的Console实例。

使用Console类实现读取密码的例子如下
import java.io.Console;
import java.util.*;
/**
* This program is console input
* @author keyman
* @version 1.0.0 2015-8-8
*
*/
public class InputTest {
/**
* @param args
*/
public static void main(String[] args) {
try{
Console co = System.console();
String name = co.readLine("what's your name? ");
char [] password = co.readPassword("Your password is? ");

System.out.print("hello, "+name+"."+"Your input password is ");
for (int i=0;i<password.length;i++)
{
System.out.print(password[i]);
}
}catch(NullPointerException e){
System.out.println("Console is not available");
//e.printStackTrace();
}
}
}
************************此处为程序运行的情况*************************************
what's your name? keyman
Your password is?
hello, keyman.Your input password is keyman
*********************************************************************************
接下来再来讲解另一个从控制台获取输入的方法,此方法在各个版本均被支持。即直接使用System.in
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* This program is console input
* @author keyman
* @version 1.0.0 2015-8-8
*
*/
public class InputTest {
/**
* @param args
*/
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
try {
System.out.print("Please input some string: ");
str = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("The input information from console ==> " + str);
}
}
总结:在Java中、从控制台获取输入的方式有三种,具体如下
Java.lang.System.in (目前JDK版本均支持)

Java.util.Scanner (JDK版本>=1.5)

Java.io.Console(JDK版本>=1.6) ==> 通常用于读入密码,因为不回显字符

注:本文仅为本人肤浅的学习,如有纰漏,望请指正!同时、本文仅供参考!

本文出自 “Keyman” 博客,转载请与作者联系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: