【问题标题】:List<String> as command line argument in javaList<String> 作为java中的命令行参数
【发布时间】:2012-07-11 18:00:31
【问题描述】:

我想在 Java 中提供 3 个输入作为命令行参数:

  1. inputFileLocation
  2. configFileList
  3. outputFileLocation

但我无法理解如何将列表作为命令行参数。我尝试过这样的事情:

public class BatchLauncher {
    public static void main(String[] args) {
        int argc = 0;
        String inputFileLocation = argc < args.length ? args[argc++] : null;
        String configFileList = argc < args.length ? args[argc++] : null;
        String outputFileLocation = argc < args.length ? args[argc++] : null;
        CaptureBatch captureBatch = new CaptureBatch();
        captureBatch.setInputFileLocation(inputFileLocation);
        captureBatch.setConfigFileList(configFileList);
        captureBatch.setOutputFileLocation(outputFileLocation);
    }
}

我在captureBatch.setConfigFileList(configFileList); 收到编译时错误。

输入将像这样给出:

D:/input a.conf,b.conf,c.conf D:/output

其中D:/inputinputFileLocationa.conf,b.conf,c.conf 是带有, 分隔符的configFileList,并且 D:/outputoutputFileLocation

【问题讨论】:

  • Arrays.asList(configFileList.split(",")) 会给你列表。

标签: java command-line-arguments


【解决方案1】:

命令行参数在 Java 中被聚合到 String[] 中,并未经处理传递到您的 main 中。

public static void main(final String[] args) { // code }

使用D:/input a.conf,b.conf,c.conf D:/output 的示例输入,args 的值变为["D:/input", "a.conf,b.conf,c.conf", "D:/output"],其中[] 分隔String 的数组。

你有两个选择:

  1. 手动解析此args 数组并手动将其拆开并自行处理每个元素。在这种情况下,您需要将第二个参数 Arrays.asList(args[2].split(",")); 以根据需要将其转换为 List&lt;String&gt;
  2. 使用JSAP ( Java Simple Argument Parser ) 之类的东西,让经过良好测试且成熟的库为您解析、验证和格式化输入。 Specifically it can parse the second argument you are passing in for you.

不用说,我更喜欢第二种选择,因为第一种只是脆弱的忙碌工作。

【讨论】:

    【解决方案2】:
    public static void main(String[] args) {
        int argc = 0;
        if(args.length>2){
        String inputFileLocation = args[0];
        String configFileList = args[1];
        String outputFileLocation = args[2];
    
        List<String> lList=Arrays.asList(configFileList.split(","));
        System.out.println(inputFileLocation);
        System.out.println(lList);
        System.out.println(outputFileLocation);
        }
    }
    

    输出:

    D:/输入

    [a.conf, b.conf, c.conf]

    D:/输出

    【讨论】:

      猜你喜欢
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 2010-09-16
      • 1970-01-01
      • 2013-12-31
      • 2017-03-04
      • 1970-01-01
      相关资源
      最近更新 更多