在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” 博客,转载请与作者联系!
原文地址:http://keyman.blog.51cto.com/9807984/1683004