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

 更新时间:2016年10月02日 09:40:52   投稿:jingxian  
下面小编就为大家带来一篇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从控制台读入数据的几种方法总结的全部内容了,希望对大家有所帮助,多多支持脚本之家~

相关文章

  • Java日期工具类时间校验实现

    Java日期工具类时间校验实现

    一般项目中需要对入参进行校验,比如必须是一个合法的日期,本文就来介绍一下Java日期工具类时间校验实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • mybatis中的if-else及if嵌套使用方式

    mybatis中的if-else及if嵌套使用方式

    这篇文章主要介绍了mybatis中的if-else及if嵌套使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • springcloud注册hostname或者ip的那些事

    springcloud注册hostname或者ip的那些事

    Spring cloud是一个基于Spring Boot实现的服务治理工具包,在微服务架构中用于管理和协调服务的。这篇文章主要介绍了springcloud注册hostname或者ip,需要的朋友可以参考下
    2019-11-11
  • 在IntelliJ IDEA 搭建springmvc项目配置debug的教程详解

    在IntelliJ IDEA 搭建springmvc项目配置debug的教程详解

    这篇文章主要介绍了在IntelliJ IDEA 搭建springmvc项目配置debug的教程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • springCloud中的Sidecar多语言支持详解

    springCloud中的Sidecar多语言支持详解

    这篇文章主要介绍了springCloud中的Sidecar多语言支持详解,Sidecar是将一组紧密结合的任务与主应用程序共同放在一台主机Host中,但会将它们部署在各自的进程或容器中,需要的朋友可以参考下
    2024-01-01
  • SpringCloud @RefreshScope刷新机制浅析

    SpringCloud @RefreshScope刷新机制浅析

    RefeshScope这个注解想必大家都用过,在微服务配置中心的场景下经常出现,他可以用来刷新Bean中的属性配置,那大家对他的实现原理了解吗?它为什么可以做到动态刷新呢
    2023-03-03
  • Mybatis 如何开启控制台打印sql语句

    Mybatis 如何开启控制台打印sql语句

    这篇文章主要介绍了Mybatis 如何开启控制台打印sql语句问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • SpringBoot集成MyBatisPlus+MySQL的实现

    SpringBoot集成MyBatisPlus+MySQL的实现

    MybatisPlus是国产的第三方插件, 它封装了许多常用的CURDapi,免去了我们写mapper.xml的重复劳动,本文主要介绍了SpringBoot集成MyBatisPlus+MySQL的实现,感兴趣的可以了解一下
    2023-10-10
  • SpringBoot中的@Import注解四种使用方式详解

    SpringBoot中的@Import注解四种使用方式详解

    这篇文章主要介绍了SpringBoot中的@Import注解四种使用方式详解,@Import注解只可以标注在类上,可以结合 @Configuration注解、ImportSelector、ImportBeanDefinitionRegistrar一起使用,也可以导入普通的类,需要的朋友可以参考下
    2023-12-12
  • 浅析Spring的JdbcTemplate方法

    浅析Spring的JdbcTemplate方法

    本篇浅析Spring的JdbcTemplate方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01

最新评论