使用java System.getProperty(“Import”)

时间:2013-11-15 13:43:33

标签: 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.parseInputFile(filename, sheet);

事实上,当我实际尝试导入文件时,它没有按预期执行,文件名总是为null,因此它永远不会到达我的parseInputFile。

我的老师为不同的编程练习制作了大量代码,这些代码可以执行类似的操作,我也查看了我的同事前几年所做的项目,但是每个人都做了我上面做的事情。

我必须像这样运行我的程序:java -Dimport=A-002-002-M-ok.import calc.textui.Calc否则老师给出的测试都不会运行。

如果这不是一个有用的问题,我很抱歉,但我试着到处寻找。如果有人能解释System.getProperty("import")如何运作以及为什么它在这种情况下不起作用,我将非常感激。

3 个答案:

答案 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-...或有其他空格,大写字母......