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

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

时间: 2024-12-11 20:04:38

JavaStep --- 3. 读取输入的相关文章

shell学习-读取输入

功能:读取输入,打印:如果长度小于MINLEN,那么输出空格. #!/bin/bash # paragraph-space.sh # Insert a blank line between paragraphs of a single-spaced text file. # Usage: $0 <FILENAME MINLEN=30 while read line do echo "$line" len=${#line} if [ "$len" -lt &qu

Houdini 节点参数读取输入节点的数据列表

今天做了一个在点级别的smooth工具,因为houdini默认的smooth是基于primitive的.工具能够根据输入节点的点组(point groups)或者特定的点属性(attributes)来smooth特定范围的点,这里讲一讲制作过程中一个很值得在意的细节问题,那就是读取输入节点的特定属性列表,这里讲的就是point group list和attribute list. 这个问题相当于用自己的方法实现很多节点里面的选择点组或者面组的功能,这个问题大家也许觉得非常简单,不就是从子节点上拽

AJAX 实时读取输入文本(php)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

3.7.1 读取输入

前面已经看到,打印输出到"标准输出流"(即控制台窗口)是一件废话从那个容易的事情,只要调用System.out.println即可.然而,读取"标准输入"System.in就没那么简单了.要想通过控制台进行输入,首先需要构造一个Scanner对象,并与"标准输入流"System.in关联. Scanner in= new Scanner(System.in); 现在,就可以使用Scanner类的各种方法实现输入操作了.例如,nextLine方法将

java控制台程序-读取输入的字符串,其中文字符变成乱码问题

GBK编码操作系统(如中文win7系统),在编写控制台程序时, 当读取控制台输入含中文的字符串出现乱码时可以通过以下方法解决: 前提:String strInput 保存了由控制台输入的字符串. 解决办法代码: byte[] byteInput = strInput.getBytes("ISO-8859-1"); strInput = new String(byteInput, "GBK"); 这样strInput中的中文字符便可正常.

【Java】Scanner类nextInt后使用nextLine无法读取输入

首先,我们先介绍一下,在学习Java语言,对于字符串的输入,由于Scanner.next()函数无法输入空格及回车,此时,我们就必须要用Scanner.nextLine()解决这类问题, 在使用过程中,我们会发现nextInt()和nextLine连用,出现这个问题: 在输入一个int数据之后,就会输出,而字符串完全没有输入...... 然后去网上查了一些资料,看了一些论坛,了解了一些其中的原理,整理一下. 首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的

文件读取输入

在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:1.基于C的文件操作: 2.基于C++的文件操作: 3.基于WINAPI的文件操作: 4.基于BCB库的文件操作: 5.特殊文件的操作. 壹.基于C的文件操作 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之. 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:

Java 读取输入字符和字符串

1. 使用Scanner读取字符和字符串 3 /** 4 * Created by SheepCore on 2020-2-26 5 */ 7 public class Main { 8 public static void main(String[] args) { 9 Scanner scan = new Scanner(System.in); //声明一个Scanner对象,初始输入流为控制台 10 String name = scan.nextLine(); //读取键盘输入字符串(包括

matlab 读取输入数组

In an assignment A(I) = B, the number of elements in B and I must be the same MATLAB:index_assign_element_count_mismatch中文解释:在赋值语句 A(I) = B 中,B 和 I 的元素个数必须相同出错原因:I 和 B 的维数.大小不一样.这正如"把 5 个水果放到 6 个篮子".或者"把 6 个水果放到 5 个篮子",均无法实现解决办法:自己设置断点