用Java处理命令行数据(args[]的替代方案)



我写了很多java工具,这些工具从命令行获取信息,java通过main(args[])提供对命令行的访问。有问题的应用程序通常是Windows工具(因此从命令行或批处理文件运行)。

根据我在痛苦的经历中所学到的,Windows根据实际的名称对参数数据进行自己的(有时是古怪的)转换和转换。然后,它被转移到Java上,Java进行自己的解析和处理,最终为您提供args[]。目前,正是这种多层次的解析/预处理让我感到悲伤,因为它并不总是清楚事情在哪里被破坏了。

我的第一个问题是,在使用args之前,Java实际做了什么解析/转换?根据我所能收集到的信息,它只接受操作系统提供的参数数据(据我所知,这只是一个长字符串),并根据空白(制表符、空格字符)对其进行分隔。就这么简单吗?

第二个问题是,在将未处理的命令行数据传递给Java时,是否可以获得这些数据?虽然用空格分隔args通常很方便,但当你开始添加更复杂的排列时,它就会崩溃。因此,根据白色空间风的吹向,"-foo=bar"可能最终成为"-foo=" "bar""-foo" "=" "bar""-foo" "=bar"。如果我在第一个问题中做出的假设是正确的,那么你可以通过在参数中的每个元素之间插入一个空格来构建一个字符串,但如果完成了其他处理,那么访问原始参数就会变得更有用。

最后,我知道已经有很多库可以用Java处理命令行数据。我可能应该在某个时候开始使用其中一个,但现在我只想确切地了解正在做什么,以及Java本身提供了什么替代方案(如果有的话)。

shell解析参数并将其传递给程序。Java不做任何额外的解析。

您可以通过一些特殊技巧获得整条线路

使用

ManagementFactory.getRuntimeMXBean()

getInputArguments()

感谢:如何获得启动进程的命令行

最新更新