[java] Java에서 속성 파일 읽기

속성 파일을 읽으려는 다음 코드가 있습니다.

Properties prop = new Properties();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream stream = loader.getResourceAsStream("myProp.properties");
prop.load(stream);

마지막 줄에서 예외가 발생합니다. 구체적으로 특별히:

Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at Assignment1.BaseStation.readPropertyFile(BaseStation.java:46)
at Assignment1.BaseStation.main(BaseStation.java:87)

고마워, 니 코스



답변

예외에 InputStream따라이 null이며 이는 클래스 로더가 속성 파일을 찾지 못한다는 것을 의미합니다. myProp.properties가 프로젝트의 루트에 있다고 생각합니다.이 경우 선행 슬래시가 필요합니다.

InputStream stream = loader.getResourceAsStream("/myProp.properties");


답변

이 페이지에서 정보를 찾을 수 있습니다 :
http://www.mkyong.com/java/java-properties-file-examples/

Properties prop = new Properties();
try {
    //load a properties file from class path, inside static method
    prop.load(App.class.getClassLoader().getResourceAsStream("config.properties"));

    //get the property value and print it out
    System.out.println(prop.getProperty("database"));
    System.out.println(prop.getProperty("dbuser"));
    System.out.println(prop.getProperty("dbpassword"));

}
catch (IOException ex) {
    ex.printStackTrace();
}


답변

ResourceBundle클래스를 사용 하여 속성 파일을 읽을 수 있습니다 .

ResourceBundle rb = ResourceBundle.getBundle("myProp.properties");


답변

Properties prop = new Properties();

try {
    prop.load(new FileInputStream("conf/filename.properties"));
} catch (IOException e) {
    e.printStackTrace();
}

conf/filename.properties 프로젝트 루트 디렉토리에 기반


답변

키워드는 다음과 같이 사용할 수 없습니다.

props.load(this.getClass().getResourceAsStream("myProps.properties"));

정적 컨텍스트에서.

가장 좋은 방법은 다음과 같은 애플리케이션 컨텍스트를 확보하는 것입니다.

ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/META-INF/spring/app-context.xml");

그런 다음 클래스 경로에서 리소스 파일을로드 할 수 있습니다.

//load a properties file from class path, inside static method
        prop.load(context.getClassLoader().getResourceAsStream("config.properties"));

이것은 정적 및 비 정적 컨텍스트 모두에서 작동하며 가장 중요한 부분은이 속성 파일이 응용 프로그램의 클래스 경로에 포함 된 모든 패키지 / 폴더에있을 수 있다는 것입니다.


답변

파일은 com/example/foo/myProps.properties클래스 경로에서 와 같이 사용할 수 있어야합니다 . 그런 다음 다음과 같이로드하십시오.

props.load(this.getClass().getResourceAsStream("myProps.properties"));


답변

config.properties가 src / main / resource 디렉토리에 있지 않고 프로젝트의 루트 디렉토리에있는 경우 아래와 같은 작업을 수행해야합니다.

Properties prop = new Properties();
File configFile = new File(myProp.properties);
InputStream stream = new FileInputStream(configFile);
prop.load(stream);