Java命令行参数解析 | AI生成和翻译

Home 2025.03

要使用 net.sourceforge.argparse4j(这个受 Python argparse 启发的 Java 命令行参数解析库),请按照以下步骤操作:


1. 添加依赖

要在项目中引入 argparse4j,请将其添加为依赖项。如果使用 Maven,请在 pom.xml 中添加以下内容:

<dependency>
    <groupId>net.sourceforge.argparse4j</groupId>
    <artifactId>argparse4j</artifactId>
    <version>0.9.0</version>
</dependency>

对于 Gradle 等其他构建工具,请查看 Maven 中央仓库 获取等效配置。


2. 创建 ArgumentParser 对象

首先使用 ArgumentParsers.newFor("prog").build() 创建 ArgumentParser 实例,其中 "prog" 是程序名称。您还可以添加描述并启用自动帮助生成。

示例:

import net.sourceforge.argparse4j.ArgumentParsers;
import net.sourceforge.argparse4j.inf.ArgumentParser;

ArgumentParser parser = ArgumentParsers.newFor("Checksum").build()
    .defaultHelp(true)  // 启用 -h/--help 选项
    .description("计算指定文件的校验和。");

3. 添加参数

使用 parser.addArgument() 定义程序将接受的命令行参数。您可以指定:

示例:

parser.addArgument("-t", "--type")
    .choices("SHA-256", "SHA-512", "SHA1")  // 限制为这些选项
    .setDefault("SHA-256")                  // 未提供时的默认值
    .help("指定要使用的哈希函数");           // 帮助消息中的描述

parser.addArgument("file")
    .nargs("*")                             // 接受零个或多个参数
    .help("要计算校验和的文件");             // 帮助消息中的描述

4. 解析命令行参数

使用 parser.parseArgs() 解析命令行参数(通常从 main 方法作为 String[] args 传入)。将其包装在 try-catch 块中以优雅处理解析错误。

示例:

import net.sourceforge.argparse4j.inf.Namespace;
import net.sourceforge.argparse4j.inf.ArgumentParserException;

public class Checksum {
    public static void main(String[] args) {
        ArgumentParser parser = ArgumentParsers.newFor("Checksum").build()
            .defaultHelp(true)
            .description("计算指定文件的校验和。");
        
        parser.addArgument("-t", "--type")
            .choices("SHA-256", "SHA-512", "SHA1").setDefault("SHA-256")
            .help("指定要使用的哈希函数");
        parser.addArgument("file").nargs("*")
            .help("要计算校验和的文件");

        Namespace ns = null;
        try {
            ns = parser.parseArgs(args);  // 解析参数
        } catch (ArgumentParserException e) {
            parser.handleError(e);        // 打印错误和帮助消息
            System.exit(1);               // 出错时退出
        }
    }
}

5. 访问解析值

parseArgs() 方法返回包含解析后参数值的 Namespace 对象。使用 getString()getList() 等方法获取这些值。

示例:

String hashType = ns.getString("type");  // 例如 "SHA-256"
List<String> files = ns.getList("file"); // 文件名列表

System.out.println("哈希类型:" + hashType);
System.out.println("文件:" + files);

完整示例

以下是一个完整示例:

import net.sourceforge.argparse4j.ArgumentParsers;
import net.sourceforge.argparse4j.inf.ArgumentParser;
import net.sourceforge.argparse4j.inf.ArgumentParserException;
import net.sourceforge.argparse4j.inf.Namespace;
import java.util.List;

public class Checksum {
    public static void main(String[] args) {
        // 步骤 2:创建解析器
        ArgumentParser parser = ArgumentParsers.newFor("Checksum").build()
            .defaultHelp(true)
            .description("计算指定文件的校验和。");

        // 步骤 3:添加参数
        parser.addArgument("-t", "--type")
            .choices("SHA-256", "SHA-512", "SHA1").setDefault("SHA-256")
            .help("指定要使用的哈希函数");
        parser.addArgument("file").nargs("*")
            .help("要计算校验和的文件");

        // 步骤 4:解析参数
        Namespace ns = null;
        try {
            ns = parser.parseArgs(args);
        } catch (ArgumentParserException e) {
            parser.handleError(e);
            System.exit(1);
        }

        // 步骤 5:访问解析值
        String hashType = ns.getString("type");
        List<String> files = ns.getList("file");

        // 示例输出
        System.out.println("哈希类型:" + hashType);
        System.out.println("文件:" + files);
    }
}

附加功能

有关高级用法,请参阅 Argparse4j 用户手册


这个工作流程让您能够使用 net.sourceforge.argparse4j 轻松解析和处理 Java 应用程序中的命令行参数。


Back Donate