无法从java读取属性文件
Posted
技术标签:
【中文标题】无法从java读取属性文件【英文标题】:Unable to read properties file from java 【发布时间】:2018-12-23 05:15:20 【问题描述】:我无法从文件中读取属性。当我尝试打印时它给了我null,当我调试时我明白它没有在函数中加载文件
pro.Load()
。但是我的路径是正确的,我仍然无法加载文件
package AdvancedJava;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
public class ReadingPropertiesFile
public static void main(String[] args) throws FileNotFoundException
Properties pro = new Properties();
String path = "C://Users//310259741//Documents//ProjectManagment//JavaBasics//object.properties";
// BufferedReader reader = new BufferedReader(new FileReader(path));
File f = new File(path);
FileInputStream fis = null;
try
fis = new FileInputStream(f);
pro.load(fis);
catch (IOException e)
System.out.println(e.getMessage());
System.out.println(pro.getProperty("lastname"));
属性文件内容
firstname = John
lastname = harry
Automation = Selenium
【问题讨论】:
你能发布堆栈跟踪吗? 为什么要使用双斜杠?是否有任何错误信息正在打印?为什么不打印完整的堆栈跟踪? 【参考方案1】:我认为问题出在路径上:
String path = "C://Users//310259741//Documents//ProjectManagment//JavaBasics//object.properties";
应该是这样的:
String path = "C:\\Users\\310259741\\Documents\\ProjectManagment\\JavaBasics\\object.properties";
还要确保属性文件的路径正确。如果它在你的项目中,路径应该是这样的:
String path = "C:\\...\\ProjectFolder\\src\\main\\resources\\object.properties";
【讨论】:
您确定您的object.properties
文件具有lastname
属性吗?
这是我的属性 firstname = John lastname = harry Automation = Selenium
我很确定您的属性文件路径是错误的。你在项目中有你的属性文件吗?我已经编辑了我的答案,请看一下
成功了,我只是将文件名从 object.properties 重命名为 config.properties
我在文件名中犯了错误..我纠正了它,非常感谢你【参考方案2】:
你的例子对我来说很好。但是,如果没有堆栈跟踪,我们将无法为您提供有关您获得的 NPE 的帮助。
无论如何,我对您的代码有几点提示。我建议在使用 FileInputStream
操作时使用 try - with resources 以确保资源在完成后将被关闭。
您可以避免使用new File(path);
。相反,我建议使用java.nio.*
包中的Paths
。基于您的代码 sn-p 的示例如下:
public static void main(String[] args)
Properties properties = new Properties();
try (FileInputStream stream = new FileInputStream(Paths.get("E:\\test\\file.txt").toFile()))
properties.load(stream);
catch (IOException e)
e.printStackTrace();
System.out.println(properties.getProperty("lastname"));
使用Paths
的优势在于它们(如果没有记错的话)与系统无关,这意味着您无需担心提供正确的路径分隔符。
【讨论】:
【参考方案3】:其实路径应该是另外一个分隔符
"C:\\Users\\310259741\\Documents\\ProjectManagment\\JavaBasics\\object.properties";
但我应该建议您 - 将您的应用程序属性文件存储在您的资源文件夹下,有点:
src/main/resources/config.properties
你可以像这样访问这个文件:
public Properties extractFrom(String fileName)
Properties properties = new Properties();
try (InputStream inputStream = PropertiesExtractor.class
.getClassLoader().getResourceAsStream(fileName))
properties.load(inputStream);
catch (IOException ex)
throw new RuntimeException("Cannot load properties", ex);
return properties;
extractFrom("config.properties");
【讨论】:
以上是关于无法从java读取属性文件的主要内容,如果未能解决你的问题,请参考以下文章
docker上的Spring启动无法从资源中读取属性文件,但可以在没有Docker的情况下使用java -jar
无法从 Java Spring Boot 项目中的 application.yml 文件中读取用户定义类的列表
TypeError:无法读取从带有已定义模板的 JSON 文件中读取的未定义属性(读取“array_google”)
“帮助修复”错误:无法从文件中读取属性列表:info.plist
java.lang.IllegalStateException:无法从jar文件spring-plugin-core-1.2.0.RELEASE.jar的清单中读取Class-Path属性