Java 패키지에서 속성 파일 로드
패키지 구조에 포함된 속성 파일을 읽어야 합니다.com.al.common.email.templates
.
다 해봤는데 알 수가 없어요.
결국, 내 코드는 서블릿 컨테이너에서 실행되지만, 나는 어떤 것도 컨테이너에 의존하고 싶지 않다.JUnit 테스트 케이스를 작성하는데 둘 다 작동해야 합니다.
패키지의 클래스에서 속성을 로드할 때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
수업 중에.
절대 경로(/'로 시작하는 경로)를 사용하면 현재 패키지가 무시됩니다.
Joachim Sauer의 답변에 덧붙이자면 정적 컨텍스트에서 이 작업을 수행해야 할 경우 다음과 같은 작업을 수행할 수 있습니다.
static {
Properties prop = new Properties();
InputStream in = CurrentClassName.class.getResourceAsStream("foo.properties");
prop.load(in);
in.close()
}
(예외처리는 이전과 같이 생략)
다음 두 가지 사례는 다음과 같은 이름의 예제 클래스에서 속성 파일을 로드하는 것과 관련이 있습니다.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/
디렉토리로 이동합니다.
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();
}
}
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());
}
}
}
Properties 클래스를 로드 메서드로 사용하고 ClassLoader getResourceAsStream을 사용하여 입력 스트림을 가져오는 것으로 가정합니다.
이름은 어떻게 전달됩니까? 다음 형식으로 전달되어야 합니다./com/al/common/email/templates/foo.properties
나는 이 전화로 이 문제를 해결할 수 있었다.
Properties props = PropertiesUtil.loadProperties("whatever.properties");
또한 /src/main/resources에 whattery.properties 파일을 저장해야 합니다.
아무도 수업의 패키지를 다룰 필요 없이 위와 비슷하지만 더 간단한 해결책을 언급하지 않는다.myfile.properties가 클래스 경로에 있다고 가정합니다.
Properties properties = new Properties();
InputStream in = ClassLoader.getSystemResourceAsStream("myfile.properties");
properties.load(in);
in.close();
즐거운 시간 되세요.
다음 코드를 사용하십시오.
"com/al/common/templates/") "com/al" = "= /templatesStringBuffer " = "StringBuffer("com/al/common/email/templates/");
path.path.foo.properties";
InputStream fs = getClassLoadergetResourceAsStream(path.toString());
if(fs == null){
System.err.println("Unable to load the properties file");
}
else{
try{
p.load(fs);
}
catch (IOException e) {
e.printStackTrace();
}
}
언급URL : https://stackoverflow.com/questions/333363/loading-a-properties-file-from-java-package
'sourcecode' 카테고리의 다른 글
'==' 또는 '==='을 사용하여 문자열과 'strcmp()'을 비교합니다. (0) | 2022.12.06 |
---|---|
Python REST(웹 서비스) 프레임워크 권장 사항 (0) | 2022.12.06 |
변환을 방지하기 위해 vuex 상태에서 컬렉션을 복사하는 것이 표준입니까? (0) | 2022.12.06 |
__all_은 Python에서 무엇을 의미합니까? (0) | 2022.12.06 |
문자열의 MYSQL ORDER BY 번호 (0) | 2022.12.06 |