使用作为主参数传递的文件初始化程序(system.getProperty())

时间:2009-11-07 17:14:28

标签: java command-line-arguments system-properties

我必须用这一行执行我的程序:

java -DImport=data.txt -Din=input.dat -Dout=output1.dat main.Main

我一直试图弄清楚如何做到这一点但却无法让它真正发挥作用。我正在使用Netbeans,因为我真的没有使用unix终端类路径等等。

public static void main(String[] args) {    
    String fileIn;
    fileIn = System.getProperty ("Import");
}

fileIn由于前一个语句而变为null。

我刚开始使用-DImport = data.txt,在我解决之后我会尝试其他的。


那部分已经完成,谢谢。我会尝试将stdin设置为-Din文件而不是键盘。感谢


我做了你说的cartoonfox,它的打印导入null意味着fileIn没有从System.getProperty接收任何字符串(“导入”);

我也收到了这个警告:

警告:不推荐使用java.io.DataInputStream中的[deprecation] readLine()                 line = dis.readLine();

我正在使用此页面中的代码:http://www.java-tips.org/java-se-tips/java.io/how-to-read-file-in-java.html因为我不太了解读者:(

3 个答案:

答案 0 :(得分:4)

我认为你混淆了两个概念:

  • Java args 是指在类名后传递的参数。所以如果你打电话:
  

java main.MyMain 0 1 2

你的 args 将是:

  

args [0] = 0

     

args [1] = 1

     

args [2] = 2

  • Java 属性是您使用-D传递的内容,如 -DImport = data.txt

在你的代码中你混合了两者。删除行

  

if(args.length == 1)

它会起作用:)

答案 1 :(得分:2)

删除if (args.length == 1),因为您没有解析参数,而是设置系统属性。

程序参数跟在主要类之后

main.Main arg1=val arg2=val2

答案 2 :(得分:1)

将-Import = foo视为将“导入”配置选项设置为值“foo”的方法。

只需删除if语句:

public static void main(String[] args) {

String fileIn;
fileIn = System.getProperty ("Import");
System.out.println("Import "+fileIn);
}
BTW我认为Sun选择了-D(而不是其他东西)因为许多C编译器允许你在命令行上用-D设置宏 - 这意味着它是一种设置名为“常量”的方法在命令行上......这与Java中的相似。

我不确定为什么你会为此运行null,所以这里是我编译并运行它的记录 - 输出。你将不得不看看差异你正在做什么和我在这个成绩单中做了什么:

Script started on Sat Nov  7 18:16:25 2009
bash-3.2$ cat T.java
public class T {

public static void main(String[] args) {

String fileIn;
fileIn = System.getProperty ("Import");
System.out.println("Import "+fileIn);
}
}
bash-3.2$ javac T.java
bash-3.2$ java -DImport=data.txt -Din=input.dat -Dout=output1.dat T
Import data.txt
bash-3.2$ exit
exit

Script done on Sat Nov  7 18:17:07 2009