1

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

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 变得空。

我只是从 -DImport=data.txt 开始,在我解决它之后,我会尝试其他的。


部分已经完成,谢谢。我会尝试将标准输入设置为 -Din 文件而不是键盘。谢谢


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

我也收到此警告:

警告: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因为我不太了解读者:(

4

3 回答 3

4

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

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

java main.MyMain 0 1 2

你的参数将是:

参数[0] = 0

参数 [1] = 1

参数 [2] = 2

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

在您的代码中,您将两者混合在一起。删除线

if (args.length == 1)

它会工作:)

于 2009-11-07T17:24:34.790 回答
2

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

程序参数像这样在主类之后

main.Main arg1=val arg2=val2
于 2009-11-07T17:19:24.413 回答
1

将 -Import=foo 视为将“Import”配置选项设置为“foo”的一种方式。

只需删除 if 语句:

public static void main(String[] args) {

String fileIn;
fileIn = System.getProperty ("Import");
System.out.println("Import "+fileIn);
}

顺便说一句,我认为 Sun 选择了 -D (而不是 - 其他东西),因为许多 C 编译器允许您在命令行上使用 -D 设置宏 - 这意味着它是一种在命令上设置名为“常量”的方式-line... 这类似于它在 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
于 2009-11-07T17:20:09.217 回答