欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java 字符终端上获取输入三种的方式分享

程序员文章站 2023-12-20 16:33:16
在java 字符终端上获取输入有三种方式: 1、java.lang.system.in (目前jdk版本均支持)2、java.util.scanner (jdk版本>...

在java 字符终端上获取输入有三种方式:

1、java.lang.system.in (目前jdk版本均支持)
2、java.util.scanner (jdk版本>=1.5)
3、java.io.console(jdk版本>=1.6),特色:能不回显密码字符

参考:
这里记录java中从控制台读入信息的几种方式
(1)jdk 1.4(jdk 1.5和jdk 1.6也都兼容这种方法)

复制代码 代码如下:

public class testconsole1 { 
    public static void main(string[] args) { 
        string str = readdatafromconsole("please input string:); 
        system.out.println("the information from console: + str); 
    } 

    /**
     * use inputstreamreader and system.in to read data from console
     * 
     * @param prompt
     *            
     * @return input string
     */ 
    private static string readdatafromconsole(string prompt) { 
        bufferedreader br = new bufferedreader(new inputstreamreader(system.in)); 
        string str = null; 
        try { 
            system.out.print(prompt); 
            str = br.readline(); 

        } catch (ioexception e) { 
            e.printstacktrace(); 
        } 
        return str; 
    } 

(2)jdk 1.5(利用scanner进行读取)

复制代码 代码如下:

public class testconsole2 { 
    public static void main(string[] args) { 
        string str = readdatafromconsole("please input string:"); 
        system.out.println("the information from console:" + str); 
    } 

    /**
     * use  java.util.scanner to read data from console
     * 
     * @param prompt
     * 
     * @return input string
     */ 
    private static string readdatafromconsole(string prompt) { 
        scanner scanner = new scanner(system.in); 
        system.out.print(prompt); 
        return scanner.nextline(); 
    } 

scanner还可以很方便的扫描文件,读取里面的信息并转换成你要的类型,比如对“2 2.2 3.3 3.33 4.5 done”这样的数据求和,见如下代码:

复制代码 代码如下:

public class testconsole4 { 

    public static void main(string[] args) throws ioexception { 
        filewriter fw = new filewriter("num.txt"); 
        fw.write("2 2.2 3.3 3.33 4.5 done"); 
        fw.close(); 

        system.out.println("sum is "+scanfileforsum("num.txt")); 
    } 

    public static double scanfileforsum(string filename) throws ioexception { 
        double sum = 0.0; 
        filereader fr = null; 
        try { 
            fr = new filereader(filename); 
            scanner scanner = new scanner(fr); 

            while (scanner.hasnext()) { 
                if (scanner.hasnextdouble()) { 
                    sum = sum + scanner.nextdouble(); 

                } else { 
                    string str = scanner.next(); 

                    if (str.equals("done")) { 
                        break; 
                    } else { 
                        throw new runtimeexception("file format is wrong!"); 
                    } 

                } 
            } 

        } catch (filenotfoundexception e) { 
            throw new runtimeexception("file " + filename + " not found!"); 
        } finally { 
            if (fr != null) 
                fr.close(); 
        } 
        return sum; 
    } 

(3)jdk 1.6(利用java.io.console进行读取)
jdk6中提供了java.io.console类专用来访问基于字符的控制台设备.
你的程序如果要与windows下的cmd或者linux下的terminal交互,就可以用console类代劳.(类似system.in和system.out)
但我们不总是能得到可用的console, 一个jvm是否有可用的console依赖于底层平台和jvm如何被调用.
如果jvm是在交互式命令行(比如windows的cmd)中启动的,并且输入输出没有重定向到另外的地方,那么就可以得到一个可用的console实例。
在使用 ide 的情况下,是无法获取到console实例的,原因在于在 ide 的环境下,重新定向了标准输入和输出流,也是就是将系统控制台上的输入输出重定向到了 ide 的控制台中

复制代码 代码如下:

public class testconsole3 { 
    public static void main(string[] args) { 
        string str = readdatafromconsole("please input string:"); 
        system.out.println("the information from console:" + str); 
    } 

    /**
     * use  java.io.console to read data from console
     * 
     * @param prompt
     * 
     * @return input string
     */ 
    private static string readdatafromconsole(string prompt) { 
        console console = system.console(); 
        if (console == null) { 
            throw new illegalstateexception("console is not available!"); 
        } 
        return console.readline(prompt); 
    } 

console类还有个特色就是,专门对密码(输入无回显)等安全字符,进行了处理。专门提供 readpassword()方法,具体应用见如下代码:

复制代码 代码如下:

public class testconsole5 { 

     public static void main(string[] args) { 
            console console = system.console(); 
            if (console == null) { 
                throw new illegalstateexception("console is not available!"); 
            } 

            while(true){ 
            string username = console.readline("username: "); 
            char[] password = console.readpassword("password: "); 

            if (username.equals("chris") && string.valueof(password).equals("gohead")) { 
              console.printf("welcome to java application %1$s.\n", username); 
             // 使用后应立即将数组清空,以减少其在内存中占用的时间,增强安全性  
                password = null; 
              system.exit(-1); 
            }  
            else { 
              console.printf("invalid username or password.\n"); 
            } 
            } 
          } 


上一篇:

下一篇: