我试图使用apache公共资源CLI解析我的命令行参数。对于这里的例子来说,这可能有点沉重,但在我正在创建的程序的上下文中是有意义的。我试图读取文件模式过滤器,类似于grep用来选择要处理的文件。
我的论点是这样的:
Program --input *.*
我写了一个测试程序来看看解析器看到了什么;
public static void main(String[] args) {
Options options = new Options();
options.addOption(new Option(INPUT_FILTER_SHORT, INPUT_FILTER_LONG, true, INPUT_FILTER_DESCRIPTION));
CommandLineParser parser = new BasicParser();
CommandLine cmd = parser.parse(options, args);
System.out.println(cmd.getOptionValue(INPUT_FILTER_SHORT));
}
这个打印出来:
.classpath
如果我将论点改为:
Program --input test.txt
我得到的输出:
test.txt
我假设我必须做点什么来告诉apache commons什么不是特殊角色?我似乎在网上找不到关于这个的任何信息。
我在Windows(7)上遇到了这个问题。我相当确定是*。*导致了这个问题,因为当我切换到使用不使用*的模式时,预期的模式会出现。
您的问题实际上与Commons CLI无关,而是与shell和Java可执行文件如何一起处理参数有关。
要消除其他因素,看看发生了什么,请使用一个简短的Java程序:
public class ArgsDemo {
public static void main(String[] args) {
for(int i=0; i<args.length; i++) {
System.out.println("" + i + ": " + args[i]);
}
}
}
玩java ArgsDemo hello world
,java ArgsDemo*
等等,观察发生了什么。
在UNIX和Linux上:
Java对*
没有特殊的处理。但是,shell有。所以如果你做了:
$ mkdir x
$ cd x
$ touch a b
$ java -jar myjar.jar MyClass *
...然后MyClass.main()
将用参数数组["a","b"]
调用-因为UNIX shell将*
扩展到当前目录中的文件。
可以通过转义来抑制这种情况:
$ java -jar myjar MyClass * // main() sees ["*"])
(请注意,UNIX shell不会将*.
扩展到.classpath
,因为此表单会忽略以开头的“隐藏”文件。)
在窗户上
cmd。exe不执行UNIX风格的通配符扩展。如果将
*
作为参数提供给Windows中的命令,则该命令将获得一个文本*
。例如,PKUNZIP*。邮政编码>通行证
*。zip
toPKUNZIP。EXE
,如果该程序想扩展通配符,则由其自行决定。
由于Java 7的某些版本,Windows的Java可执行文件在将参数传递给
main()
类之前,会对自己的文件名扩展执行一些通配符。
我无法找到明确的留档的Javafor Windows通配符扩展规则,但您应该能够通过引用来控制它,转义引号以防止cmd.exe解释它们:
> java.exe -jar myjar.jar MyClass """*.*"""
(未经测试,因为我手边没有一个视窗盒子,引用cmd.exe有点像野兽——请尝试,要么编辑上面的内容,要么留下评论)
问题内容: 我有一个非常简单的JSON,其中包含产品评论,例如: 我想使用GSON将其读入我的Java应用程序中。我建立了一个类来保存每个评论的结果: 要读取JSON文件,我的代码是: 使用此代码,我只能在JSON中检索第一个评论,所以我的问题是:如何遍历所有读者并获得下一个评论?我不需要将评论存储在列表中,只需要访问对象一次。任何帮助都超过了欢迎。 问题答案: 您必须获取列表中的全部数据,然后再
问题内容: 假设我有一个包含以下内容的文件: 如何通过PHP解析内容? 问题答案: 只需使用该功能即可解析CSV文件
问题内容: 我试图使用PHP解析JSON文件。但是我现在被困住了。 这是我的JSON文件的内容: 到目前为止,这是我尝试过的: 但是,因为我不知道的名字(例如,)和所有可用键和值(如,)事前,我想我需要创建一些foreach循环。 我希望为此举一个例子。 问题答案: 要遍历多维数组,可以使用RecursiveArrayIterator 输出:
问题内容: 我使用以下代码来解析html模板。它运作良好。 和html模板test.html。 但是当我将html文件移动到另一个目录时。然后使用以下代码。输出始终为空。 谁能告诉我怎么了?还是无法使用html / template包? 问题答案: 出问题的是您的程序(程序包)找不到文件。当您指定相对路径(您是相对路径)时,它们将解析到当前工作目录。 您必须确保html文件/模板在正确的位置。例如
我有一个非常简单的产品评论JSON,比如: 我想用GSON把它读到我的Java应用程序中。我构建了一个类来保存每次复习的结果: 使用这段代码,我只能检索JSON中的第一个评论,所以我的问题是:如何遍历所有阅读器并获得下一个评论?我不需要将评论存储在列表中,只需要访问对象一次。任何帮助都大于欢迎。