我正在为大学做一些工作,我主要负责这个:
Spreadsheet sheet = new Spreadsheet(0,0);
SpreadsheetManager manager = new SpreadsheetManager(sheet);
/* Read an Import file, if any */
String filename = System.getProperty("import");
if (filename != null)
sheet.parseInputFile(filename, sheet);
事实上,当我实际尝试导入文件时,它没有按预期执行,文件名总是为null,因此它永远不会到达我的parseInputFile。
我的老师为不同的编程练习制作了大量代码,这些代码可以执行类似的操作,我也查看了我的同事前几年所做的项目,但是每个人都做了我上面做的事情。
我必须像这样运行我的程序:java -Dimport=A-002-002-M-ok.import calc.textui.Calc
否则老师给出的测试都不会运行。
如果这不是一个有用的问题,我很抱歉,但我试着到处寻找。如果有人能解释System.getProperty("import")
如何运作以及为什么它在这种情况下不起作用,我将非常感激。
答案 0 :(得分:3)
我建议你看看documentation of System.getProperty()
。
基本上它从系统中检索一个值,无论是已存在还是由您设置。
为避免检索null
,您可以使用指定默认值的其他方法签名:
System.getProperty("import", "file.txt");
要设置系统属性,您可以在启动时指定它:
java -Dimport =“file.txt”your_application
或以编程方式设置:
System.setProperty(“import”,“file.txt”);
答案 1 :(得分:2)
使用以下命令运行程序时
java -Dimport=foo
然后调用方法
System.getProperty("import")
应该返回“foo”。
你有可能写一个小例子程序来说服自己吗?没有任何SheetManagers和所有东西,只需
class ItWorks {
public static void main(String[] args) {
System.out.println(System.getProperty("import"));
}
}
这样称呼它
java -Dimport=indeed ItWorks
并报告会发生什么。
话虽如此:如果你想传递命令行参数,为什么不使用该工具进行命令行参数? (即String []数组传递给main?)
然后你可以这样打电话给你的程序:
java calc.textui.Calc my-nice-spreadsheet.data
=============================================== ==
请在您的班级定义的开放式大括号之后立即在calc.textui.Calc
程序 中写下以下内容:
public class Calc ..... { // a line like this already exists
// insert next line here
public static String filename = System.getProperty("import");
// rest of your class, as before.
}
然后在您的方法中注释掉getProperty()
行不起作用,但其余部分包括System.out.println(filename);
它会改变吗?
答案 2 :(得分:0)
也许系统属性不是最明确的方式(取决于您的应用程序)
您还可以使用命令行参数将文件名传递给main
方法:
public class CommandLineExample {
public static void main(String[] args) {
if (args.length < 1) {
System.err.println("usage: CommandLineExample <filename>");
System.exit(1);
}
String filename = args[0];
if (filename !=null && !filename.isEmpty()) {
...
}
}
}
您的程序应该被称为:
java CommandLineExample theFileName
字符串“theFileName”将传递给args [0]中的main方法(任何其他单词将在args的后续位置传递{args [1],args [2],...})
修改强>
如果必须使用
java -Dimport=filename ...
然后System.getProperty("import")
将返回文件名。
确认您正在调用正确的程序(类名,包,版本,上次编译成功,...),并检查该属性是否错误输入,如java -Dinport=A-...
或有其他空格,大写字母......