Мне нужно прочитать файлы свойств, которые были захоронены в моей структуре пакета в com.al.common.email.templates
.
Я пробовал все, и я не могу понять.
В конце концов, мой код будет запущен в контейнере сервлетов, но я не хочу зависеть от этого контейнера. Я пишу тестовые примеры JUnit и должен работать в обоих.
Ответ 1
При загрузке свойств из класса в пакете com.al.common.email.templates
вы можете использовать
Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream("foo.properties");
prop.load(in);
in.close();
(добавьте всю необходимую обработку исключений).
Если ваш класс не находится в этом пакете, вам нужно немного освоить InputStream:
InputStream in =
getClass().getResourceAsStream("/com/al/common/email/templates/foo.properties");
Относительные пути (те, у которых нет ведущего // ) в getResource()
/getResourceAsStream()
, означают, что ресурс будет искать по отношению к каталогу, представляющему пакет, в котором находится класс.
Использование java.lang.String.class.getResource("foo.txt")
будет искать (несуществующий) файл /java/lang/String/foo.txt
в пути к классам.
Использование абсолютного пути (тот, который начинается с '/') означает, что текущий пакет игнорируется.
Ответ 2
Чтобы добавить к Joachim Sauer ответ, если вам когда-либо понадобится сделать это в статическом контексте, вы можете сделать что-то вроде следующего:
static {
Properties prop = new Properties();
InputStream in = CurrentClassName.class.getResourceAsStream("foo.properties");
prop.load(in);
in.close()
}
(Исключение выполнялось, как и раньше.)
Ответ 3
Следующие два случая относятся к загрузке файла свойств из класса класса с именем TestLoadProperties
.
Случай 1: Загрузка файла свойств с помощью ClassLoader
InputStream inputStream = TestLoadProperties.class.getClassLoader()
.getResourceAsStream("A.config");
properties.load(inputStream);
В этом случае файл свойств должен быть в каталоге root/src
для успешной загрузки.
Случай 2: Загрузка файла свойств без использования ClassLoader
InputStream inputStream = getClass().getResourceAsStream("A.config");
properties.load(inputStream);
В этом случае файл свойств должен находиться в том же каталоге, что и файл TestLoadProperties.class
для успешной загрузки.
Примечание. TestLoadProperties.java
и TestLoadProperties.class
- это два разных файла. Первый файл .java
обычно находится в каталоге проекта src/
, а последний, .class
файл обычно находится в его каталоге bin/
.
Ответ 4
public class Test{
static {
loadProperties();
}
static Properties prop;
private static void loadProperties() {
prop = new Properties();
InputStream in = Test.class
.getResourceAsStream("test.properties");
try {
prop.load(in);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Ответ 5
public class ReadPropertyDemo {
public static void main(String[] args) {
Properties properties = new Properties();
try {
properties.load(new FileInputStream(
"com/technicalkeeda/demo/application.properties"));
System.out.println("Domain :- " + properties.getProperty("domain"));
System.out.println("Website Age :- "
+ properties.getProperty("website_age"));
System.out.println("Founder :- " + properties.getProperty("founder"));
// Display all the values in the form of key value
for (String key : properties.stringPropertyNames()) {
String value = properties.getProperty(key);
System.out.println("Key:- " + key + "Value:- " + value);
}
} catch (IOException e) {
System.out.println("Exception Occurred" + e.getMessage());
}
}
}
Ответ 6
Предполагая, что вы используете класс Properties через load, и я предполагаю, что вы используете ClassLoader getResourceAsStream, чтобы получить входной поток.
Как вы передаете имя, кажется, должно быть в этой форме: /com/al/common/email/templates/foo.properties
Ответ 7
Мне удалось решить эту проблему с помощью этого вызова
Properties props = PropertiesUtil.loadProperties("whatever.properties");
Дополнительно, вы должны поместить свой файл whatever.properties в/src/main/resources
Ответ 8
Никто не упоминает подобное, но даже более простое решение, чем выше, без необходимости иметь дело с пакетом класса. Предполагая, что myfile.properties находится в пути к классам.
Properties properties = new Properties();
InputStream in = ClassLoader.getSystemResourceAsStream("myfile.properties");
properties.load(in);
in.close();
Enjoy
Ответ 9
используйте приведенный ниже код, пожалуйста:
Properties p = new Properties();
StringBuffer path = new StringBuffer("com/al/common/email/templates/");
path.append("foo.properties");
InputStream fs = getClass().getClassLoader()
.getResourceAsStream(path.toString());
if(fs == null){
System.err.println("Unable to load the properties file");
}
else{
try{
p.load(fs);
}
catch (IOException e) {
e.printStackTrace();
}
}