我已经领先于自己并且正在学习一个学期,这要求我掌握超出我所学习知识的Java知识。我不知道我的命令是如何将参数传递给主参数,除了" echo Java foo bar"通过命令行 我试图通过java解析JSON;我希望下面的代码足够
这是我的方法:
public static void parseCrewWithListMapping(String filePath) {
ObjectMapper mapper = new ObjectMapper();
try {
List<Crew> crews = mapper.readValue(new File(filePath),
mapper.getTypeFactory().constructCollectionType(List.class, Crew.class));
for(Crew crew : crews) {
System.out.println(crew);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这是尝试运行此方法的主要方法。
public class CrewParsing {
public static void main(String[] args)
throws ParserConfigurationException, SAXException, IOException, XMLStreamException {
if(args.length < 1)
throw new RuntimeException("No argument exception");
System.out.println("Parsing Crew Names");
CrewParser.parseCrewWithListMapping(args[2]);
System.out.println("Finished\n\n");
}
}
我的所有文件都在正确的位置,我试图重新创建:
public static void parseJSONWithListMapping(String filePath) {
ObjectMapper mapper = new ObjectMapper();
try {
List<Employee> employees = mapper.readValue(new File(filePath),
mapper.getTypeFactory().constructCollectionType(List.class, Employee.class));
for(Employee employee : employees){
System.out.println(employee);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
方法:
public static void parseJSONWithListMapping(String filePath) {
ObjectMapper mapper = new ObjectMapper();
try {
List<Employee> employees = mapper.readValue(new File(filePath),
mapper.getTypeFactory().constructCollectionType(List.class, Employee.class));
for(Employee employee : employees){
System.out.println(employee);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
主要方法(有效):
public class Practice1Test {
public static void main(String[] args)
throws ParserConfigurationException, SAXException, IOException, XMLStreamException {
if(args.length < 1)
throw new RuntimeException("No argument exception");
System.out.println("Parsing Crew Names");
CrewParser.parseJSONWithListMapping(args[2]);
System.out.println("Finished\n\n");
}
}
在代码中传递args[2]
作为parseJSONWithListMapping
的参数时,我的json结果很好。
但是当我尝试我的代码时,&#34;没有参数异常&#34;运行,我假设它告诉我没有传递参数。
可能是什么问题?我真的希望这是足够的细节; _;
答案 0 :(得分:3)
您正在检查args.length < 1
并抛出&#34;无参数例外&#34;,但之后您尝试使用args[2]
,这是第三个命令行参数。
如果你想要第一个,args[0]
,第二个是args[1]
,依此类推。如果您需要一个参数,那么您的args.length < 1
是正确的,并且您使用args[0]
。如果您需要两个参数,则可以使用args.length < 2
表示错误,然后使用args[0]
和args[1]
。
答案 1 :(得分:0)
从命令行运行程序时,可以传入参数列表,例如:
java CrewParsing jsonPath1 jsonPath2 jsonPath3
如果您是从Eclipse等IDE运行,则可能只是单击Run
或Debug
并忘记输入任何参数。在Eclipse中 - 右键单击主类,当您将鼠标悬停在Run(or Debug) as...
上时选择run(debug) configuration
。有一个参数选项卡,您可以在那里输入它们。您正在复制的程序可能已经设置了它们。
如果您想了解有关参数的更多信息,我会发现Oracle command line tutorial解释得很好:(全部取自链接)
Java应用程序可以从命令行接受任意数量的参数。这允许用户在启动应用程序时指定配置信息。
用户在调用应用程序时输入命令行参数,并在要运行的类的名称后指定它们。例如,假设一个名为Sort的Java应用程序对文件中的行进行排序。要对名为friends.txt的文件中的数据进行排序,用户将输入:
java Sort friends.txt
启动应用程序时,运行时系统会通过字符串数组将命令行参数传递给应用程序的main方法。在前面的示例中,命令行参数在包含单个String的数组中传递给Sort应用程序:&#34; friends.txt&#34;。
Echo示例单独在一行上显示每个命令行参数:
public class Echo {
public static void main (String[] args) {
for (String s: args) {
System.out.println(s);
}
}
}
以下示例显示用户如何运行Echo。用户输入用斜体显示。
java Echo Drink Hot Java
Drink
Hot
Java
//3 separate arguments are all printed out - args[0], args[1], args[2]
如果您仍然不确定您实际拥有什么参数,我会尝试打印您的参数,就像教程中显示的那样。