用Java处理命令行数据(args[]的替代品)
我编写了许多java工具,这些工具从命令行获取反馈信息,java通过用Java处理命令行数据(args[]的替代品),java,command-line-arguments,Java,Command Line Arguments,我编写了许多java工具,这些工具从命令行获取反馈信息,java通过main(args[])提供对这些工具的访问。所讨论的应用程序通常是Windows工具(因此从命令行或批处理文件运行) 从我痛苦的经历中学到的,Windows根据实际调用的参数数据对参数数据进行自己的转换(有时很古怪)。然后,它被转移到Java上,Java自己进行解析和处理,最终为您提供args[]。正是这种多层次的解析\预处理导致了我的悲痛,因为事情在哪里被破坏并不总是很清楚 我的第一个问题是,在进入args之前,Java实际
main(args[])
提供对这些工具的访问。所讨论的应用程序通常是Windows工具(因此从命令行或批处理文件运行)
从我痛苦的经历中学到的,Windows根据实际调用的参数数据对参数数据进行自己的转换(有时很古怪)。然后,它被转移到Java上,Java自己进行解析和处理,最终为您提供args[]
。正是这种多层次的解析\预处理导致了我的悲痛,因为事情在哪里被破坏并不总是很清楚
我的第一个问题是,在进入args之前,Java实际上做了什么样的解析\转换?据我所知,它只接受操作系统提供的参数数据(据我所知,它只是一个长字符串),并基于空白(制表符,空格字符)对其进行分隔。有那么简单吗 第二个问题,在将未处理的命令行数据传递给Java时,是否可以获取该数据?虽然用空格分隔arg通常很方便,但当您开始添加更复杂的排列时,arg就会崩溃。因此,
“-foo=bar”
可能最终成为“-foo=”
“bar”,或“-foo”
”“=”
“bar”,或“-foo”
“=bar”,这取决于空格风吹的方向。如果我在第一个问题中所做的假设是正确的,那么您可以通过在args中的每个元素之间插入一个空格来构建一个字符串,但是如果完成了其他处理,那么访问原始args将变得更加有用
最后一点,我知道已经有很多库可以用Java处理命令行数据。我可能会在某个时候开始使用其中的一个,但现在我只想确切地了解正在做什么,以及Java本身提供了哪些替代方案(如果有的话)。这些参数由shell解析并传递给您的程序。Java不做任何额外的解析。通过一些特殊的技巧,您可以获得整行代码 使用 及
感谢:“在到达args之前,Java实际上做了什么样的解析\转换”无。通过shell传递的任何东西都可以得到。
So“-foo=bar”可能会以“-foo=”“bar”或“-foo”“=”bar”或“-foo”“=bar”
-您是否有一个工作示例来证明-foo=bar
在args[]
中作为-foo=bar”以外的任何东西传递?另请参见
ManagementFactory.getRuntimeMXBean()
getInputArguments()