Java获取用户输入的三种常用方式对比与实现

Noah
Noah
发布时间:2026-10-14 | 4人浏览过
原创

在Java应用程序开发中,接收外部数据是常见需求。本文将系统介绍三种主要输入方式:通过命令行启动时传递参数数组、使用Scanner类进行交互式类型安全读取,以及通过BufferedReader结合InputStreamReader处理标准输入流。文章将提供具体代码实现、关键参数说明及使用时的注意事项。

结果或目标

掌握在不同运行环境下(批处理、交互式控制台)从用户处获取数据的正确方法,理解各方法的输入类型限制与性能特征。

准备条件

  • JDK 环境已配置并可在终端执行 java 命令。
  • 熟悉 Java 基础语法及 System.in 作为字节输入流的特性。

真实操作顺序

第1步:通过命令行参数接收输入

目的:适用于程序启动前即确定输入内容的场景,如脚本自动化或配置文件加载。

原理:JVM 会将 java 命令后跟随的字符串分割填入 main 方法的 String[] args 数组中。

操作要点:

  • 多个参数间默认以空格分隔。
  • 若参数内容本身包含空格,必须使用双引号 " 将整个参数括起来。

代码示例:

public class MainArgs {
    public static void main(String[] args) {
        System.out.println("接收到 " + args.length + " 个参数");
        for (String str : args) {
            System.out.println(str);
        }
    }
}

完成判断:运行 java MainArgs arg1 "arg with space" arg3 后,控制台应依次打印参数数量及每个参数的值。

第2步:使用 Scanner 类读取标准输入

目的:实现交互式输入,支持自动识别并转换多种基本数据类型(int, long, float, double 等)及字符串。

入口:java.util.Scanner 类。

动作:创建 new Scanner(System.in) 对象,调用相应的 nextXxx() 方法。

重要参数/技巧:

  • 分隔符控制:Scanner 默认以空白字符(空格、制表符、换行)为分隔。可使用 scan.useDelimiter("\n") 修改分隔行为。
  • 阻塞式读取:hasNextLong() 等方法会阻塞线程直到收到有效输入或关闭流。

代码示例:

import java.util.Scanner;

public class ScannerInputTest {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        // 读取长整型数据
        if (scan.hasNextLong()) {
            long l = scan.nextLong();
            System.out.println("读取到数值: " + l);
        } else {
            System.out.println("输入非长整型数字");
        }
        
        // 读取单行字符串
        // 注意:如果之前调用过 nextXxx(),残留的换行符可能影响 nextLine()
        // 建议在此处添加 scan.nextLine(); 清空缓冲区
        String text = scan.nextLine();
        System.out.println("读取到的字符串: " + text);
        
        scan.close();
    }
}

风险提示:混合使用 next()/nextInt() 和 nextLine() 时需特别注意缓存区的换行符残留问题,建议在调用 nextLine() 前清空缓冲区。

第3步:使用 BufferedReader 读取标准输入

目的:获得比 Scanner 更高效的 I/O 性能,适合大量文本数据的处理。仅能读取字符串。

入口:java.io.BufferedReader 和 java.io.InputStreamReader。

动作:构建包装链 new BufferedReader(new InputStreamReader(System.in)),循环调用 readLine()。

重要参数:需处理 IOException 异常,通常声明 throws Exception 或在 try-catch 中捕获。

代码示例:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class BufferedReaderTest {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input;
        
        System.out.print("请输入内容(输入 quit 退出):");
        while ((input = br.readLine()) != null) {
            if ("quit".equals(input)) {
                break;
            }
            System.out.println("用户输入的是:" + input);
            System.out.print("请输入内容:");
        }
        br.close();
    }
}

完成判断:控制台接受键盘输入并实时回显,直到输入 "quit" 或中断输入流。

简要总结

三种方式各有侧重:args 适用于启动时传参;Scanner 语法简洁、支持类型解析,适合小规模交互;BufferedReader 性能更佳但仅处理文本,适合对速度敏感的大文本读取。根据具体需求选择合适的输入方式即可。以上就是Java中用户向系统传递参数的三种基本方式的详细内容,更多关于Java输入处理的技术资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表