我有以下代码,并希望修改它以接受命令行参数,而不是使用扫描程序读取文件。您是否可以指出我需要在代码中进行一些更改才能这样做?任何帮助表示赞赏。我将有一个名为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
答案 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过滤器程序。
如果您想使用文件(如果提供),但如果没有,则恢复为标准输入,您可以执行以下操作:
-