Java如何获取命令行输入?

获取程序启动时的命令行参数

通过main方法的args数组直接获取程序启动时传入的参数:

public class StartupArgsExample {
    public static void main(String[] args) {
        // 示例:java StartupArgsExample file.txt --verbose
        if (args.length > 0) {
            System.out.println("参数列表:");
            for (int i = 0; i < args.length; i++) {
                System.out.println(i + ": " + args[i]);
            }
        } else {
            System.out.println("未提供启动参数");
        }
    }
}
  • 输出示例:
    0: file.txt
    1: --verbose
  • 注意事项:
    • 参数以空格分隔,若参数含空格需用双引号包裹(如"file name.txt")。
    • args[0]是第一个参数(非程序名)。

运行时获取用户输入

使用 Scanner 类(推荐简单场景)

import java.util.Scanner;
public class ScannerExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入用户名:");
        String username = scanner.nextLine(); // 读取整行
        System.out.print("请输入年龄:");
        int age = scanner.nextInt();          // 读取整数
        System.out.println("用户:" + username + ", 年龄:" + age);
        scanner.close(); // 关闭资源
    }
}

使用 BufferedReader(需处理IO异常)

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class BufferedReaderExample {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("输入命令:");
        String command = reader.readLine();
        System.out.println("执行命令:" + command);
        reader.close();
    }
}

使用 Console 类(安全输入密码)

public class ConsoleExample {
    public static void main(String[] args) {
        Console console = System.console();
        if (console == null) {
            System.err.println("当前环境不支持Console");
            return;
        }
        char[] password = console.readPassword("密码:"); // 输入不回显
        console.printf("密码长度:%d\n", password.length);
    }
}
  • 适用场景对比:
    | 方法 | 优点 | 缺点 |
    |——————–|—————————–|————————–|
    | Scanner | 简单易用,支持多种数据类型 | 不直接支持密码隐藏 |
    | BufferedReader | 高效处理大文本 | 需手动转换数据类型 |
    | Console | 支持密码隐藏,安全性高 | 在IDE中可能返回null |

获取系统属性参数(-D启动参数)

通过System.getProperty()获取-D传递的系统属性:

public class SystemPropertyExample {
    public static void main(String[] args) {
        // 启动命令:java -Dconfig.path="/etc/app.conf" SystemPropertyExample
        String configPath = System.getProperty("config.path");
        if (configPath != null) {
            System.out.println("配置文件路径:" + configPath);
        } else {
            System.out.println("未指定配置路径");
        }
    }
}

关键注意事项

  1. 参数解析进阶:
    • 复杂参数建议使用库如 Apache Commons CLI 或 Picocli。
  2. 输入验证:
    • 对用户输入做校验(如空值、类型转换异常):
      try {
          int num = Integer.parseInt(input);
      } catch (NumberFormatException e) {
          System.err.println("输入非数字!");
      }
  3. 资源释放:
    • Scanner和BufferedReader需调用close()释放资源(Java 7+可用try-with-resources)。
  4. 跨平台问题:
    • 换行符:Windows用\r\n,Linux/macOS用\n,Scanner和BufferedReader已自动处理。

  • 启动参数 → 用main方法的args数组。
  • 运行时输入 → 选Scanner(基础交互)、BufferedReader(高性能)或Console(密码场景)。
  • 系统属性 → 通过System.getProperty()获取-D参数。

根据需求选择合适方法,并始终验证输入安全性,对于复杂命令行工具,推荐使用成熟的解析库提升效率。

引用说明:本文内容参考Oracle官方文档Java Console类、Scanner类及Java命令行参数规范。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9403.html

赞 (0)
酷番叔酷番叔
上一篇 2025年7月31日 08:56
下一篇 2025年7月31日 09:10

相关推荐

  • 英语中如何正确且礼貌地回应他人的命令?

    在英语交流中,回应命令的方式需根据命令的语气、场合、说话双方的关系以及具体情境灵活调整,恰当的回答不仅能准确传达意图,还能体现礼貌、合作或委婉的立场,避免误解或冲突,以下从不同维度详细解析英语中回应命令的常见方式,直接服从:简洁明确的肯定回应当命令清晰且合理,且听话人愿意执行时,可直接用简洁的肯定句回应,表达配……

    2025年8月27日
    22100
  • 建设网站的工作步骤中备案网站怎么办理?网站备案需要什么材料

    网站备案是网站建设过程中不可逾越的关键步骤,它直接决定了网站能否合法上线并稳定运营,根据《互联网信息服务管理办法》,未取得备案号的网站将面临被关闭甚至处罚的风险,在网站技术搭建完成后,必须将备案作为首要任务,提前准备材料、选择合规的服务商,并按照流程严格执行,酷番云凭借多年备案服务经验,能够帮助用户高效完成备案……

    2026年8月21日
    6500
  • 为什么越喜欢一个人越不敢主动?

    在C语言标准库中,没有名为vsp的内置命令或函数,根据常见需求推测,您可能是指以下两种相关功能:可能性1:vsprintf() 函数(可变参数格式化)用于将格式化字符串写入字符数组,是sprintf()的可变参数版本,需配合va_list使用,函数原型int vsprintf(char *str, const……

    2025年7月17日
    22400
  • 建网站xyz是什么,创建网站资产需要哪些步骤?

    建网站的本质是创建一项可增值的数字资产将网站建设视为一个短期项目,往往会导致后期维护成本高、增长乏力,真正有远见的做法,是把建网站当作创建一项长期数字资产来规划——从域名选择、技术架构到内容运营,每一步都围绕资产增值展开,只有资产化的思维,才能让网站持续产生流量、品牌价值与商业回报,第一层:为什么建网站是创建资……

    2026年8月21日
    6300
  • Axurejs弹出提示框如何自定义样式与交互?

    在Web原型设计中,交互元素的合理性直接影响用户体验的模拟效果,Axure RP作为主流原型设计工具,其内置的“弹出提示框”(Tooltip)功能为设计师提供了丰富的信息展示方案,通过简单的配置即可实现鼠标悬停、点击触发的动态提示,帮助用户理解复杂功能或补充关键信息,弹出提示框的核心功能AxureJS中的弹出提……

    2025年12月11日
    23100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信