Java 为什么可以';我不能在属性文件中读取一个整数吗?
我试图用Java编写一个configs文件,并将端口号放入其中,以供HTTP Web服务器连接,还包括根路径 配置文件: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
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.