什么是我的args []?

时间:2014-11-03 17:08:52

标签: java methods main

我已经领先于自己并且正在学习一个学期,这要求我掌握超出我所学习知识的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;运行,我假设它告诉我没有传递参数。

可能是什么问题?我真的希望这是足够的细节; _;

2 个答案:

答案 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运行,则可能只是单击RunDebug并忘记输入任何参数。在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]

如果您仍然不确定您实际拥有什么参数,我会尝试打印您的参数,就像教程中显示的那样。