使用java System.getProperty(“导入”)
我在为大学做一些工作,我的主要目标是:使用java System.getProperty(“导入”),java,system-properties,Java,System Properties,我在为大学做一些工作,我的主要目标是: 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.parseInputFi
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);
问题是,当我实际尝试导入一个文件时,它并没有做应该做的事情,并且文件名总是空的,所以它永远不会到达我的parseInputFile
我的老师为不同的编程练习编写了一系列代码,这些代码可以做类似的事情,我也研究了我的同事在前几年所做的项目,但每一个都做了我上面所做的
我必须像这样运行我的程序:
java-Dimport=A-002-002-M-ok.import calc.textui.calc
否则老师给出的测试都不会运行
如果这不是一个有用的问题,我很抱歉,但我已经试着到处找了。如果有人能解释一下
系统.getProperty(“导入”)
是如何工作的,以及为什么它在这种情况下不起作用,我将不胜感激。我建议您看看
基本上,它从系统中检索一个值,该值可能已经存在或由您设置
要避免检索null
,可以使用另一个指定默认值的方法签名:
System.getProperty(“导入”、“文件.txt”)代码>
要设置系统属性,可以在启动时指定:
java-Dimport=“file.txt”您的应用程序
或按程序设置:
System.setProperty(“import”、“file.txt”)
可能系统属性不是实现这一点的最佳方式(取决于您的应用程序)。
您还可以使用命令行参数将文件名传递给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()) {
...
}
}
字符串“theFileName”将传递给args[0]中的main方法(任何其他单词将在args{args[1],args[2],…}的后续位置传递)
编辑
如果必须使用
java -Dimport=filename ...
然后System.getProperty(“导入”)
将返回文件名。
确认您正在调用正确的程序(类名、包、版本、上次编译成功,…),并检查当您使用以下命令运行程序时,属性是否键入错误,如java-Dinport=A-…
,或是否有其他空格、大写字母…:
java -Dimport=foo
然后方法调用
System.getProperty("import")
应该返回“foo”
你是否可以编写一个小的示例程序来说服自己?没有任何管理人员和所有的东西,只是
class ItWorks {
public static void main(String[] args) {
System.out.println(System.getProperty("import"));
}
}
就这样说吧
java -Dimport=indeed ItWorks
并报告发生的情况
也就是说:如果您想传递命令行参数,为什么不使用该工具来传递命令行参数呢?(即传递给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(文件名)代码>
它是否更改?在何处以及如何设置该属性?您试图通过“导入”属性获取什么?@luanjot我正在尝试为我的电子表格导入一个带有一系列初始化的文本文件。@Ingo我将如何做?因为我在任何地方都没有见过这样的例子:/@RitaPereira你可以用System.setProperty(“import”,“yourfile.txt”)来做,但我不知道这是否是你想要的…问题是我不想导入一个“静态”的单一文件,但是一组不同的测试,具有不同的初始化和不同的名称。每次调用应用程序时,都会使用指向要导入的文件的不同路径。这就是我在发布时所做的:java-Dimport=A-002-002-m-ok.import-calc.textui.calc;我很抱歉打扰你,但我真的不明白这哪里是不正确的,我对它越来越困惑。它返回“确实”。。。但我的原始代码中的同一行返回null。。。对于后者,教师运行的测试使用java-Dimport=A-002-002-M-ok.import-calc.textui.calc调用;所以我不确定我是否能做到。@RitaPereira“但我原始代码中的同一行返回null”你怎么知道的?顺便说一句,你当然可以用`-Dimport=A-002-002-M-ok.import`运行你的小测试程序。我试过添加一个System.out.println(文件名),它返回null,它不应该返回A-002-002-M-ok.import吗?是的,它应该。而且,正如你在另一个程序中看到的,它会。但是如果没有,这意味着你的代码中有一些我们还不知道的东西。@RitaPereira请看我关于如何跟踪错误的建议。尽管如此,我必须像这样运行我的程序:java-Dimport=A-002-002-M-ok.import calc.textui.calc,否则老师给出的任何测试都不会run@RitaPereira两种可能性:调用错误的程序,或不设置“导入”。您确定它不是用“java-Dinport=A-…”或其他一些拼写错误(如空格、大写等)调用的吗。。。
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.
}