2010-03-02 5 views
14

Eclipse 내에서 동적 웹 프로젝트를 만들었습니다. src 디렉토리 안에 속성 파일을 만들었습니다 :Java EE 웹 응용 프로그램에서 등록 정보 파일에 액세스하는 방법은 무엇입니까?

<project-root>/src/props.properties 

나는 디버그 모드에서 Eclipse를 통해 Tomcat을 시작합니다. 이제 POJO 중 하나에서 속성 파일을 읽고 싶지만 FileNotFoundException이 발생합니다. 현재 경로는 Eclipse 경로 인 것 같습니다.

웹에서 해결책을 찾았지만 어느 누구도 저에게 도움이되지 않았습니다. 어쩌면 내가 뭔가 잘못했을 수도 있습니다. 코드는 다음과 같습니다.

File file = new File("props.properties"); 
FileReader reader = new FileReader(file); 
properties.load(reader); 

속성 파일에 어떻게 액세스해야합니까? 어디에 위치해야합니까?

미리 감사드립니다.

답변

0

프로젝트가 자동으로 빌드되도록 설정 되었습니까? 그렇다면 (수동으로 빌드하는 경우) props.properties이 프로젝트의 출력 폴더에 있는지 확인하십시오 (Eclipse에서는 일반적으로 "bin"이지만 프로젝트가 설정된 방식에 따라 WebRoot 또는 다른 것일 수 있음).

프로젝트가 빌드되면 설정 파일과 컴파일 된 클래스, JSP 등을 복사해야합니다. 그러나 기본적으로 파일 판독기는 소스에 JVM의 홈 디렉토리를 사용합니다. Eclipse의 경우 이는 props.properties 파일이 루트 인 'src'폴더가 아닌 프로젝트에 있어야 함을 의미합니다.

22

는 자사의 경우 웹 응용 프로그램은 다음 특성은 WEB-INF가/클래스에 배치 얻을 것이다 그리고는 웹 애플리케이션인지 여부 Actully 그 관계없이 작동합니다 클래스 로더

InputStream in = {NameOfClassWhereThisisInvoked}.class.getResourceAsStream("/props.properties"); 
properties.load(in); 
in.close(); 

를 사용하여로드 할 수 있습니다.

File file = new File(session.getServletContext().getRealPath("/") + "props.properties"); 

대신 "props.properties"의

당신이 어떤 상대 경로를 줄 수 : 나는 SRC 있으리라 믿고있어

다음과 같이이 일을하는 또 다른 방법이 있습니다 소스 폴더

+1

감사 파일을 읽을 충분하다. 나는 eclipse를 통해 바람둥이를 시작한다고 언급하는 것을 잊었다. 등록 정보 파일은 C : \ workspace \ .metadata \ .plugins \ org.eclipse.wst.server.core \ tmp0 \ wtpwebapps \ WebAppName \ WEB-INF \ classes에 복사됩니다.이제 프로젝트 루트와 src 폴더에 소품 파일의 복사본이 있지만 어쨌든 액세스 할 수 없습니다. – c0d3x

+0

위의 리소스를 리소스로로드하면 작동합니다. – objects

+0

pojo 클래스는 어디에 있습니까? 위의 두 클래스 모두 동일한 클래스 로더에 의해로드되었다고 가정합니다. – objects

3

으로 정의된다 이클립스 웹 애플리케이션 프로젝트의 "WebContent"폴더.

2

여기에 속성을 클래스 패스

private Properties getPropertiesFromClasspath(String propFileName) 
                   throws IOException 
{ 
    Properties props = new Properties(); 
    InputStream inputStream = 
    this.getClass().getClassLoader().getResourceAsStream(propFileName); 

    if (inputStream == null) 
    { 
     throw new FileNotFoundException("property file '" + propFileName 
     + "' not found in the classpath"); 
} 

props.load(inputStream); 
return props; 
} 

당신은 처음 액세스 메모리에 속성을로드하고 나중에 정적 인 방법을 통해 사용할 수있는 싱글 톤 클래스를 만들 수 있습니다 어디서나 파일을로드 할 수있는 올바른 방법입니다. 이것의 완전한 예는 src 폴더에 http://bharatonjava.wordpress.com/2012/09/12/using-properties-file-in-java-application/

+2

아마도 이것이 더 나은 이유에 대해 정교하게 다루어야 할 것입니다. 즉, 클래스 로더가 아닌 클래스에서 getResourceAsStream을 호출하는 것과 상충되는 것이 무엇인지에 대해 자세히 설명해야합니다. – EdC

0

Kepp UR의 속성 파일에서 가능하며, 다음 코드는 모든 응답에 대한 속성이

**File file = new File("./src/config.properties"); 
    FileReader reader = new FileReader(file); 
    prop.load(reader); 
    System.out.println(prop.getProperty("directorypath"));** 
관련 문제