JavaStep --- 3. 读取输入

在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) ==> 通常用于读入密码,因为不回显字符


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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章