Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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 为什么可以';我不能在属性文件中读取一个整数吗?_Java_File Io_Properties - Fatal编程技术网

Java 为什么可以';我不能在属性文件中读取一个整数吗?

Java 为什么可以';我不能在属性文件中读取一个整数吗?,java,file-io,properties,Java,File Io,Properties,我试图用Java编写一个configs文件,并将端口号放入其中,以供HTTP Web服务器连接,还包括根路径 配置文件: root= some root port=8020 我正在尝试访问以下属性: FileInputStream file = new FileInputStream("config.txt"); //loading properties from properties file config.load(file); int port = Int

我试图用Java编写一个configs文件,并将端口号放入其中,以供HTTP Web服务器连接,还包括根路径

配置文件:

root= some root
port=8020
我正在尝试访问以下属性:

FileInputStream file = new FileInputStream("config.txt");       
//loading properties from properties file        
config.load(file);

int port = Integer.parseInt(config.getProperty("port"));   
System.out.println("this is port " + port);
如果在
getProperty
方法中使用单个参数执行此操作,则会出现此错误

"java.lang.NumberFormatException: null"
但是,如果我像这样访问它

int-port=Integer.parseInt(config.getProperty(“port”,“80”))

它起作用了

此外,它还适用于
config.getProperty(“根”)所以我不明白

编辑:


你能提供一个完整的例子来重现你的问题吗

对不起,我不明白

当我跑的时候

Properties prop = new Properties();
prop.setProperty("root", "some root");
prop.setProperty("port", "8020");
prop.store(new FileWriter("config.txt"), "test");

Properties config = new Properties();
//loading properties from properties file
config.load(new FileReader("config.txt"));

int port = Integer.parseInt(config.getProperty("port"));
System.out.println("this is port " + port);
我明白了


区别在于

root= some root #STRING

port=8020  #INTEGER
public String getProperty(String key) {
    Object oval = super.get(key);
    String sval = (oval instanceof String) ? (String)oval : null;
    return ((sval == null) && (defaults != null)) ? defaults.getProperty(key) : sval;
    }
因此,要获取根属性,可以执行以下操作

props.getProperty("root"); //Returns a String
对于整数

props.get("port"); //Returns a Object

Java属性类的工作原理

root= some root #STRING

port=8020  #INTEGER
public String getProperty(String key) {
    Object oval = super.get(key);
    String sval = (oval instanceof String) ? (String)oval : null;
    return ((sval == null) && (defaults != null)) ? defaults.getProperty(key) : sval;
    }

//顺便说一句,Peter Lawrey将端口作为字符串-这就是为什么它在他的版本中起作用


阅读以下内容:

您能否提供一个完整的示例来重现您的问题?我怀疑当您重新检查您的测试时,您会发现
端口
没有被加载。OP,我们正在尝试帮助格式化代码(属性)。为什么要还原版本?顺便说一句,可能会有帮助。在config.txt中,属性“port”似乎不存在。哦,对不起,我没有注意到。我注意到一些错误,所以我编辑了它。@JohnathanAu在这里放了完整的代码,演示了在一次加载后正确读取root和错误读取端口。我必须在程序中显式地设置属性吗?我想自己输入文本文件…@JohnathanAu-Peter刚刚测试并发现你的应用程序本身的阅读部分工作正常。您可以进行相同的测试,并将上述测试的结果与您自己的道具文件进行比较。也许你发现了导致问题的不同之处?@JohnathanAu我这样做是为了展示你如何编写一个简单的程序,任何人都可以运行该程序来证明问题存在或不存在。简而言之,你做错了什么,但你不知道这是什么,也没有足够的信息让我们告诉你这是什么。如果你构建了一个简单完整的例子,你很可能会自己解决问题,如果没有,您可以在这里发布,我们可以看到问题所在。
我想自己在文本文件中键入…
在这种情况下,您需要正确编辑您似乎遇到问题的正确文件。我还认为config.txt中没有port属性
properties.get("key) - should work for any object type - convert it later to a specific type
properties.getProperty("key") -- ll always get a string regardless of a value type in the properties.