Java从控制台读入数据的几种方法总结

这里记录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");
      }
      }
     }

}

以上就是小编为大家带来的Java从控制台读入数据的几种方法总结的全部内容了,希望对大家有所帮助,多多支持我们~

(0)

相关推荐

  • java控制台输出百分比进度条示例

    System.out.print("\b") 会在控制台下往回删掉一个字符,如果你想回删多个字符就打印多个 "\b" 复制代码 代码如下: public static void main(String[] args) throws Exception {    System.out.print("Progress:");    for (int i = 1; i <= 100; i++) {        System.out.print(

  • Java实现控制台输出两点间距离

    计算两点之间的距离然后在控制台输出,这个题目还是挺简单的.下面我们来看看具体代码. package com.swift; import java.util.Scanner; public class PToP { public static void main(String[] args) { Scanner scan=new Scanner(System.in); System.out.println("请输入第一个点的坐标值x1"); Double x1=Double.parseD

  • java控制台输入示例分享

    java控制台输入有如下几个方法 1.JDK 1.4 及以下版本读取的方法 JDK 1.4 及以下的版本中要想从控制台中输入数据只有一种办法,即使用System.in获得系统的输入流,再桥接至字符流从字符流中读入数据.只能读取字符串,若需要读取其他类型的数据需要手工进行转换.代码如下: 复制代码 代码如下: BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String str = null;try{

  • 控制台显示java冒泡排序流程示例

    类:Nums    权限:public方法:main    权限:public参数:nums,i,j,num;参数介绍:nums,数据类型 int[] ,用来存储 int 型的一系列数组:i,数据类型 int ,作为 for 循环的循环变量,存储排序比较的轮数:j,数据类型 int ,作为 for 循环的循环变量,存储该轮排序比较的次数:num,数据类型 int ,作为两值互换的第三方变量.方法功能: 定义一个 int[] 数组:设置一个循环变量 i ,记录比较轮数:设置一个循环变量 j ,记录

  • java从控制台接收一个数字的实例详解

    java从控制台接收一个数字的实例详解 功能: 从控制台接收一个数 实现代码: import java.io.*; //引入一个IO流的包 public class helloworld1 { public static void main(String args[]) { try{ //输入流,从键盘接收数 InputStreamReader isr=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(i

  • Java控制台输入数组并逆序输出的方法实例 原创

    输入一个数组,然后颠倒次序进行输出,这种算法在程序开发中经常用到,下面我们通过一个小实例来看看怎么实现在控制台输入一个数组,并让其逆序输出的. 源码: import java.util.Scanner; public class Test01 { public static void main(String[] args){ System.out.println("请输入五个数"); int[]l=new int [5]; for(int i=0;i<5;i++) l[i]=ne

  • Java从控制台读入数据的几种方法总结

    这里记录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: + st

  • 总结Java对象被序列化的两种方法

    Java对象为什么需要被序列化 序列化能够将对象转为二进制流,对象就可以方便的在网络中被传输和保存. 实现序列化的方式 实现Serializable接口 实现Externalizable接口 **这两个接口的区别是:**Serializable接口会自动给对象的所有属性标记为可被序列化.而Externalizable接口默认不给任何属性标记可被序列化,如果需要序列化,需要重写两个方法,分别是writeExternal()和readExternal(),然后在这两个方法中标记需要被序列化的对象属性

  • java调用WebService服务的四种方法总结

    目录 一.前言 二.简介   三.具体解析 第一种方式,首先得下载axis2的jar包,Axis2提供了一个wsdl2java.bat命令可以根据WSDL文件自动产生调用WebService的代码. 第二种RPC 方式,强烈推荐. 第三种:利用HttpURLConnection拼接和解析报文进行调用. 第四种,利用httpclient 总结 一.前言 本来不想写这个的,因为网上类似的是在是太多了.但是想想自己前面段时间用过,而且以后可能再也没机会用了.所以还是记录一下吧.我这儿是以C语言生成的W

  • Java 多线程有序执行的几种方法总结

    Java 多线程有序执行的几种方法总结 同事无意间提出了这个问题,亲自实践了两种方法.当然肯定还会有更多更好的方法. 方法一 import java.util.concurrent.atomic.AtomicInteger; public class OrderedThread1 { static AtomicInteger count = new AtomicInteger(0); public static void main(String[] args) throws Interrupte

  • Java追加文件内容的三种方法实例代码

    整理文档,搜刮出一个Java追加文件内容的三种方法的代码,稍微整理精简一下做下分享. import Java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.RandomAccessFile;

  • Java窗体居中显示的2种方法(实例讲解)

    第1种方法: //setSize(300, 200); pack(); // 得到显示器屏幕的宽.高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; // 得到窗体的宽.高 int windowsWidth = this.getWidth(); int windowsHeight = thi

  • Java中获取当前路径的几种方法总结

    Java中获取当前路径的几种方法总结 1.利用System.getProperty()函数获取当前路径: System.out.println(System.getProperty("user.dir"));//user.dir指定了当前的路径 2.使用File提供的函数获取当前路径: File directory = new File("");//设定为当前文件夹 try{ System.out.println(directory.getCanonicalPath

  • java读取XML文件的四种方法总结(必看篇)

    JAVA操作XML文档主要有四种方式,分别是DOM.SAX.JDOM和DOM4J,DOM和SAX是官方提供的,而JDOM和DOM4J则是引用第三方库的,其中用的最多的是DOM4J方式.运行效率和内存使用方面最优的是SAX,但是由于SAX是基于事件的方式,所以SAX无法在编写XML的过程中对已编写内容进行修改,但对于不用进行频繁修改的需求,还是应该选择使用SAX. 下面基于这四种方式来读取XML文件. 第一,以DOM的方式实现. package xmls; import org.w3c.dom.D

  • java 获取mac地址的两种方法(推荐)

    我在网上找了一下获取mac地址的方法,找了两种比较不太一样的方法. 第一种 public static void main(String[] args) throws Exception { InetAddress ia = InetAddress.getLocalHost(); System.out.println(getMACAddress(ia)); } private static String getMACAddress(InetAddress ia) throws Exception

  • java 获取HttpRequest Header的几种方法(必看篇)

    在开发应用程序的过程中,如果有多个应用,通常会通过一个portal 门户来集成,这个portal  是所有应用程序的入口,用户一旦在portal 登录之后,进入另外一个系统,就需要类似的单点登录(SSO). 进入各个子系统的时候,就不需要再次登录, 当然类似的功能,你可以通过专业的单点登录软件来实现,也可以自己写数据库token 等方式来实现.其实还有一个比较简单的方法,就是通过 portal 封装已经登录过的用户的消息,写到http header 之中,然后把请求forward 到各个子系统中

随机推荐