[英]Java: How do I access my properties file?
所以我的項目中有一個屬性文件。 我需要訪問它。
這是樹形結構:
+ 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
。 找不到文件。 我如何正確找到它?
(摘自評論,回答為OP建議)
只需使用File file = new File("propertyfolder/file.properties")
但您確實需要知道Java進程工作目錄在哪里,如果無法控制它,請嘗試使用絕對路徑/c:/myapp/propertyfolder/file.properties 。
您也可以使用不帶C:盤符的/myapp/propertyfolder/file.properties路徑,以避免僅Windows映射。 您可以在Win,Linux,MacOSX中的Java應用程序中使用/路徑分隔符。 注意文本文件的編碼,請使用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
為了使用getClass().resourceAsStream("file.properties")
您需要確保文件在類路徑中。
也就是說,如果你的Test.java文件編譯成BIN /的Test.class然后確保有file.properties
在bin /文件夾中的Test.class一起
否則,您可以使用絕對路徑,這是不可取的。
您是否設置了系統屬性以從中加載file.properties
1)命令行使用-Dpropertyname = value或
2)System.setProperty()API或
3)System.load(fileName)API?
如果您尚未執行任何操作,請不要使用System.getProperty()加載file.properties文件。
假設您還沒有完成上述三項操作,那么創建文件InputStream的最佳方法是
InputStream inputStream = getClass().getResourceAsStream("<file.properties path from classpath without />");
屬性擴展了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文件中指定了“鍵:值”對,
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.