Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java System.getProperty(“导入”)_Java_System Properties - Fatal编程技术网

使用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.
}