所以我的项目中有一个属性文件。我需要访问它。
这是树形结构:
+ Project Name
|--+ folder1
|--+ propertyfolder
|--+ file.properties
或者:Project / propertyfolder / file.properties
这是我迄今为止所尝试的内容(一次一个,而不是一次完成):
// error: java.io.File.<init>(Unknown Source)
File file = new File(System.getProperty("file.properties"));
File file = new File(System.getProperty("propertyfolder/file.properties"));
File file = new File(System.getProperty("propertyfolder\\file.properties"));
File file = new File(System.getProperty("../../propertyfolder/file.properties"));
和
InputStream inputStream = getClass().getResourceAsStream("file.properties");
InputStream inputStream = getClass().getResourceAsStream("../../propertyfolder/file.properties");
InputStream inputStream = getClass().getResourceAsStream("propertyfolder/file.properties");
InputStream inputStream = getClass().getResourceAsStream("propertyfolder\\file.properties");
getClass()
中的所有变体,例如getClass().getClassLoader()
等
我得到的错误是NullReferenceException
。它找不到文件。我如何正确找到它?
答案 0 :(得分:2)
(取自OP建议的评论)
只需使用File file = new File("propertyfolder/file.properties")
,但你需要知道java进程工作目录在哪里,如果你无法控制它,请尝试一个绝对路径 /c:/myapp/propertyfolder/file.properties
您也可以使用 /myapp/propertyfolder/file.properties 路径而不使用C:磁盘字母来避免仅限Windows映射。您可以在Win,Linux,MacOSX中使用Java应用程序中的/ path分隔符。注意文本文件编码,使用InputStreamReader给出编码参数。
File file = new File("propertyfolder/file.properties");
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
BufferedReader reader = new BufferedReader(isr);
..read...
reader.close(); // this will close underlaying fileinputstream
答案 1 :(得分:1)
为了使用getClass().resourceAsStream("file.properties")
,您需要确保文件存在于类路径中。
如果你的Test.java文件被编译成bin / Test.class,那么确保bin /文件夹中的file.properties
以及Test.class
否则您可以使用绝对路径,这是不可取的。
答案 2 :(得分:1)
您是否已将系统属性设置为从
加载 file.properties1)使用-Dpropertyname = value OR
的命令行2)System.setProperty()API OR
3)System.load(fileName)API?
如果您没有完成其中任何一个,请不要使用System.getProperty()来加载file.properties文件。
假设您尚未完成上述三项,则创建文件InputStream的最佳方法是
<强> InputStream inputStream = getClass().getResourceAsStream("<file.properties path from classpath without />");
强>
答案 3 :(得分:0)
Properties扩展了Hashtable 因此,属性列表中的每个键及其对应的值都是一个字符串。
Properties props = new Properties();
// File - Reads from Project Folder.
InputStream fileStream = new FileInputStream("applicationPATH.properties");
props.load(fileStream);
// Class Loader - Reades Form src Folder (Stand Alone application)
ClassLoader AppClassLoader = ReadPropertyFile.class.getClassLoader();
props.load(AppClassLoader.getResourceAsStream("classPATH.properties"));
for(String key : props.stringPropertyNames()) {
System.out.format("%s : %s \n", key, props.getProperty(key));
}
// Reads from src folder.
ResourceBundle rb = ResourceBundle.getBundle("resourcePATH");// resourcePATH.properties
Enumeration<String> keys = rb.getKeys();
while(keys.hasMoreElements()){
String key = keys.nextElement();
System.out.format(" %s = %s \n", key, rb.getString(key));
}
// Class Loader - WebApplication : src folder (or) /WEB-INF/classes/
ClassLoader WebappClassLoader = Thread.currentThread().getContextClassLoader();
props.load(WebappClassLoader.getResourceAsStream("webprops.properties"));
从特定文件夹中读取属性。构造路径表单ProjectName
InputStream fileStream = new FileInputStream("propertyfolder/file.properties");
如果在.txt文件中指定了Key:value对,则
public static void readTxtFile_KeyValues() throws IOException{
props.load(new FileReader("keyValue.txt") );
// Display all the values in the form of key value
for (String key : props.stringPropertyNames()) {
String value = props.getProperty(key);
System.out.println("Key = " + key + " \t Value = " + value);
}
props.clear();
}