java kotlin 命令行解析

在 Java 中解析命令行字符串可以使用以下几种方法:

1. 使用 args 参数

当程序启动时,主方法(main 方法)会接收一个 String 数组作为参数,即 args。这些参数就是从命令行传递过来的。

示例代码:

object CommandLineParser {
    @JvmStatic
    fun main(args: Array<String>) {
        for (arg in args) {
            println(arg)
        }
    }
}

运行程序并传递命令行参数:

java CommandLineParser arg1 arg2 arg3

输出:

arg1
arg2
arg3

2. 使用 Apache Commons CLI

Apache Commons CLI 是一个专门用于解析命令行参数的库,功能强大且易于使用。

首先,添加依赖(以 Maven 为例):

<dependency>
    <groupId>commons-cli</groupId>
    <artifactId>commons-cli</artifactId>
    <version>1.8.0</version>
</dependency>

示例代码:


import org.apache.commons.cli.*


object CommandLineParser {
    @JvmStatic
    fun main(args: Array<String>) {
        // 定义命令行选项
        val options = Options()
        options.addOption("h", "help", false, "show help")
        options.addOption("v", "version", false, "show version")
        options.addOption("f", "file", true, "file to process")
        val parser = DefaultParser()
        var cmd: CommandLine? = null
        try {
            cmd = parser.parse(options, args)
            if (cmd!!.hasOption("h")) {
                val formatter = HelpFormatter()
                formatter.printHelp("CommandLineParser", options)
                System.exit(0)
            }
            if (cmd.hasOption("v")) {
                println("Version 1.0")
                System.exit(0)
            }
            if (cmd.hasOption("f")) {
                val fileName = cmd.getOptionValue("f")
                println("Processing file: $fileName")
            }
        } catch (e: ParseException) {
            println("Failed to parse command line properties")
            e.printStackTrace()
        }
    }
}

3. 使用 JCommander

JCommander 是一个用于解析命令行参数的库,使用方便且功能强大。下面是一个详细的示例演示如何在 Java 中使用 JCommander 解析命令行参数。

添加依赖

首先,使用 Maven 添加 JCommander 库的依赖:

<dependency>
    <groupId>com.beust</groupId>
    <artifactId>jcommander</artifactId>
    <version>1.82</version>
</dependency>
示例代码

下面是一个完整的示例代码,演示如何使用 JCommander 解析命令行参数:


import com.beust.jcommander.JCommander
import com.beust.jcommander.Parameter
import com.beust.jcommander.ParameterException


class CommandLineParser {
    @Parameter(names = ["--help", "-h"], help = true, description = "display help info")
    private var help = false

    @Parameter(names = ["--version", "-v"], description = "display version info")
    private var version = false

    @Parameter(names = ["--file", "-f"], description = "files that need to be processed")
    private var file: String? = null

    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            val main = CommandLineParser()
            val jc = JCommander.newBuilder()
                .addObject(main)
                .build()
            try {
                jc.parse(*args)
                if (main.help) {
                    jc.usage()
                    return
                }
                if (main.version) {
                    println("Version 1.0")
                    return
                }
                if (main.file != null) {
                    println("Processing file: " + main.file)
                } else {
                    println("No file provided. Use -f or --file to specify a file.")
                }
            } catch (e: ParameterException) {
                e.printStackTrace()
                jc.usage()
            }
        }
    }
}

运行程序并传递命令行参数

编译并运行程序,可以通过不同的命令行参数测试程序:

  1. 显示帮助信息:

    java CommandLineParser -h
    

    输出:

    Usage: <main class> [options]
      Options:
        -h, --help      display help info
        -v, --version   display version info
        -f, --file      files that need to be processed
    
  2. 显示版本信息:

    java CommandLineParser -v
    

    输出:

    Version 1.0
    
  3. 处理文件:

    java CommandLineParser -f myfile.txt
    

    输出:

    Processing file: myfile.txt
    
  4. 未提供文件时的提示信息:

    java CommandLineParser
    

    输出:

    No file provided. Use -f or --file to specify a file.
    
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值