我已经超越了自己,正在学习一个学期,这要求我对Java的了解超出我所学的范围。除了通过命令行"echoJavafoo-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("Finishednn");
}
}
我所有的文件都在正确的位置,我正在尝试重新创建这个:
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("Finishednn");
}
}
当在工作的代码中传递args[2]
作为parseJSONWithListMapping
的参数时,我得到了很好的json结果。但当我尝试我的代码时,运行了"无参数异常",我想这是在告诉我没有传递任何参数。
可能是什么问题?我真的希望这是足够的细节;
您正在检查args.length < 1
并抛出"无参数异常",但随后尝试使用args[2]
,这是第三个命令行参数。
如果你想要第一个,它是args[0]
,第二个是args[1]
,依此类推。如果你需要一个参数,你的args.length < 1
是正确的,你应该使用args[0]
。如果您需要两个参数,则应该使用args.length < 2
来表示错误,然后使用args[0]
和args[1]
。
从命令行运行程序时,可以传入参数列表,例如:
java CrewParsing jsonPath1 jsonPath2 jsonPath3
如果您在Eclipse之类的IDE中运行,那么您可能只是单击Run
或Debug
,而忘记输入任何参数。在Eclipse中,右键单击您的主类,当您将鼠标悬停在Run(or Debug) as...
上时,选择run(debug) configuration
。有一个参数选项卡,您可以在其中输入它们。你正在复制的程序可能已经设置好了。
如果你想了解更多关于参数的信息,我发现Oracle命令行教程很好地解释了这一点:(全部取自链接)
Java应用程序可以接受来自命令行的任意数量的参数。这允许用户在启动应用程序时指定配置信息。
用户在调用应用程序时输入命令行参数,并在要运行的类的名称之后指定这些参数。例如,假设一个名为Sort的Java应用程序对文件中的行进行排序。要对名为friends.txt的文件中的数据进行排序,用户需要输入:
java Sort friends.txt
启动应用程序时,运行时系统通过字符串数组将命令行参数传递给应用程序的主方法。在前面的例子中,在一个数组中传递给排序应用程序的命令行参数包含一个字符串:"friends.txt".
Echo示例将其每个命令行参数单独显示在一行中:
public class Echo {
public static void main (String[] args) {
for (String s: args) {
System.out.println(s);
}
}
}
以下示例显示了用户如何运行Echo。用户输入为斜体。
java回声饮料热java
Drink
Hot
Java
//3 separate arguments are all printed out - args[0], args[1], args[2]
如果你仍然不确定你实际上有什么论点,我会试着像教程中展示的那样打印出你的论点。