【问题标题】:Getting arguments from the command line从命令行获取参数
【发布时间】:2014-01-03 05:31:46
【问题描述】:

我编写了以下代码,用于将几行代码扫描为字符串并将其解析为整数。但在我的主要方法中,我使用 p.letsReadIn 来读取文件。有谁知道我如何将其转换为使用命令行参数而不是接收文件?因此,不要让用户更改 p.letsReadIn("ReadMuah.txt");每次,他们都可以使用命令行来读取文件。

public void letsReadIn(String filename) throws FileNotFoundException {
        int x;
        Scanner scan = new Scanner(new File(filename));

        StringTokenizer st;
        String nextLine = scan.nextLine();

        st = new StringTokenizer(nextLine);

        x = Integer.parseInt(st.nextToken());

        nextLine = scan.nextLine();

        st = new StringTokenizer(nextLine);

        y= Integer.parseInt(st.nextToken());

        nextLine = scan.nextLine();

        st = new StringTokenizer(nextLine);

        z= Integer.parseInt(st.nextToken());

        for (int i = 0; i < x; i++) {
            nextLine = scan.nextLine();
            st = new StringTokenizer(nextLine);
            listing.add(Integer.parseInt(st.nextToken()));
        }

        scan.close();
    }
    public static void main(String[] args) throws FileNotFoundException {

        BagItems p = new BagItems();
        p.letsReadIn("ReadMuah.txt");
        p.StartBagging();

    }

【问题讨论】:

    标签: java parsing command-line-arguments


    【解决方案1】:

    使用 args[] 中的第一个元素,而不是代码中的硬编码文件名。

    public static void main(String[] args) throws FileNotFoundException {
        BagItems p = new BagItems();
        if (args.length > 0)
        {
            p.parser(args[0]);
            p.StartBagging();
        }
        else
        {
            p.parser("hard-coded-file.txt");
            p.StartBagging();
        }
    }
    

    现在您可以将文件名作为命令行传递给程序,您的代码应该选择它。

    请注意,java中数组索引默认从0开始,因此,要访问数组的第一个元素(命令行参数数组),您应该使用[0]。

    更多提示请点击以下链接。

    how to accept values using command line argument in java

    【讨论】:

      【解决方案2】:

      这取决于您所说的“使用命令行参数而不是获取文件”的意思

      如果您的意思是从命令行(字面意思)获取参数本身,则将 ScannerScanner.parseInt 调用替换为迭代 String[] 并使用 Integer.parseInt(String) 调用进行解析的内容。但这会给你一个非用户友好的命令行语法,所以你可能想要添加一些“选项”或其他任何东西

      如果您的意思是希望能够从命令行指定输入参数的来源,请尝试以下操作:

      InputStream in;
      if (args.length > 0) {
          in = new FileInoputStream(args[0]);
      } else {
          in = System.in;
      } = System.in
      ....
      Scanner scan = new Scanner(input);
      // Read as before.
      

      这(或类似的东西)将允许您的应用程序从命名文件或标准输入读取输入。在后一种情况下,您可以像这样运行它(在 Linux 上)

      $ java ... my.Program << EOF
      1
      2
      ...
      EOF
      

      【讨论】:

        【解决方案3】:

        你可以使用p.parser(args[0]);,当然你需要检查args是否包含一些字符串。即你已经传递了一个参数,只需为此执行if (args.length &gt; 0)

        【讨论】:

          【解决方案4】:

          main() 方法的String[] args 参数是命令行参数。如果您将文件名放在命令行上,它将在该数组中。

          【讨论】:

            猜你喜欢
            • 2014-06-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-09-16
            • 2013-08-23
            • 1970-01-01
            • 2018-06-14
            • 2020-07-11
            相关资源
            最近更新 更多