更改程序以接受命令行参数

时间:2014-09-17 01:35:04

标签: java command-line-arguments

我有以下代码,并希望修改它以接受命令行参数,而不是使用扫描程序读取文件。您是否可以指出我需要在代码中进行一些更改才能这样做?任何帮助表示赞赏。我将有一个名为prgm.cmd的文件,并将在UNIX上执行它,如下所示。 prgm.cmd是实际的参数!

java Commander prgm.cmd

现在我只能使用

让程序正常工作
java Commander < prgm.cmd

CODE

import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Commander
{
    public static void main(String[] args)
    {
        Map<String,Integer> expression = new HashMap<String,Integer>();
        ArrayList<String> list = new ArrayList<String>();

        Scanner sc = new Scanner(System.in);

        while(true)
        {
            list.add(sc.nextLine());
            if(!sc.hasNextLine()) break;
        }

        ArrayList<String> tokens = new ArrayList<String>();
        ArrayList<String> PRINT = new ArrayList<String>();


        for(String element : list) {
            StringTokenizer st = new StringTokenizer(element);

            if(!element.startsWith("PRINT")) {
                while(st.hasMoreTokens()) {
                    tokens.add(st.nextToken());
                }

                expression.put(tokens.get(0),Integer.parseInt(tokens.get(2)));
                tokens.clear();
            } else {
                while(st.hasMoreTokens())
                    PRINT.add(st.nextToken());
                System.out.println(expression.get(PRINT.get(1)));
                PRINT.clear();
            }
        }
    }
}

示例命令文件:PRGM.CMD

A = 6   
C = 14
PRINT C 
B = 12
C = 8
PRINT A

输出

14
 6

1 个答案:

答案 0 :(得分:3)

public static void main(String[] args)
//                      ^^^^^^^^^^^^^

使用以下内容运行程序时

java progname arg1 arg2

参数出现在传递给main()的字符串数组中。你只需从那里提取它们并做你需要的。

以下小型(但完整)程序显示了这一点。它将回应你的论点,每行一个:

public class Test {
    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++)
            System.out.println (args[i]);
    }
}

这是将参数命令发送给程序。


相反,如果您希望仍然在文件中包含命令并只将文件名提供给程序,则只需将扫描仪更改为使用基于文件的阅读器而不是{ {1}}。以下程序接受文件名参数,然后将其回显到屏幕:

System.in

您甚至可以选择它,例如使用import java.io.FileInputStream; import java.util.Scanner; public class Test { public static void main(String[] args) { try { Scanner sc = new Scanner (new FileInputStream(args[0])); while (sc.hasNextLine()) System.out.println (sc.nextLine()); } catch (Exception e) { e.printStackTrace(); System.exit(1); } } } 指示标准输入的UNIX过滤器程序。

如果您想使用文件(如果提供),但如果没有,则恢复为标准输入,您可以执行以下操作:

-