2011-10-13 3 views
1

구성 파일을로드하여 구성을 만들려고합니다. 즉 foo.properties.Java에서 파일 경로를 사용하는 모범 사례

이 구성 파일을 저장하는 가장 좋은 장소는 무엇입니까? 패키지 내에서 사용하는 클래스를 초기화 할 것인가? src의 루트 레벨에서?

또한 파일에 액세스하는 동안 파일 시스템에서 파일의 위치 (예 : c : \ configs \ foo.properties)를 사용하고 있습니다.

더 나은 방법이 있습니까? 예를 들어 파일 시스템 위치가 아닌 프로젝트와 관련된 경로를 사용하는 경우? 그렇다면 프로젝트 트리 내에서 속성 파일의 위치를 ​​어떻게 참조 할 수 있습니까? 같은 :

src/ 
    /com.foo.bar 
    /com.foo.car 
    /com.foo.zar 
    foo.properties 

내가이가 OS의 위치/또는 파일 시스템의 위치를 ​​사용하지 않고 foo.properties에 액세스 어떻게, 내가 속성은 파일을 메모리에 읽고 싶은 말을 할 수 있습니다.

+1

답변 당신이있어 응용 프로그램의 종류에 있습니다 의존을 이야기하는 방법, 시작하는 방법, 그리고 어떤 종류의 구성에 대해 이야기하고 있는지를 설명합니다. –

답변

0

당신이 다음 방금하는 resources 폴더를 추가 할 수 있도록처럼 현재의 구조에 가까운 무언가를 계속하려면 다음

src/ 
    /com.foo.bar 
    /com.foo.car 
    /com.foo.zar 
resources 
    /foo.properties 

하지만 매우 메이븐 디렉토리 구조를 다음과 같은 추천, 그들은 정말 당신을 많이 주는가 유연성 :

에 관계없이 당신이 당신의 앱솔루트을 피하고, 자바 패키지 중 하나와 일치하는 폴더 구조에 자원을 넣어 쉽게 자원으로로드 할 수 있습니다 그 방법을 추천 할 것입니다 I과 함께 할 것입니다있는 레이아웃 무엇
src/ 
    /main 
     /java 
      /com.foo.bar 
      /com.foo.car 
      /com.foo.zar 
     /resources 
      /foo.properties 

상대 파일 경로 수수께끼. 이런 식으로 뭔가 :

src/ 
    /resources/ 
     /com/foo/bar/foo.properties 

그리고 당신은 같은 것을 할 수 com.foo.bar.MyClass 클래스 주어진 : 질문에 대한

InputStream is = MyClass. getResourceAsStream("com/foo/bar/foo.properties"); 
+0

좋은 답변입니다. config 파일이 소스 트리에서 찾을 위치보다 애플리케이션을 실행할 때 _ classpath_에 있다는 것이 더 중요하다는 점을 강조하고 싶습니다.Maven의 기본 구조는'src/main/resources'와'src/test/resources'에있는 파일들이 java 클래스들과 함께 클래스 패스 (그리고 있다면 JAR 아티펙트)에 복사되기 때문에이를 지원합니다. – swiedsw

+0

동적 리소스가 더 많은 경우 어떻게해야합니까? 예 : 외부에서 제공 한 이미지 이름을 기반으로 이미지를 저장하고 검색하는 "/ resources/image"디렉토리. .jar에 "/ resources/image"디렉토리를 포함시키지 않으면 포함 된 이미지 세트가 변경 될 때마다 응용 프로그램을 다시 빌드해야합니까? – bnunamak

0

나는 위치가 정말 프로젝트에 따라 생각 :

는 보는 좋은 질문이 될 것입니다. 나는 보통 구성 파일을 저장할 특정 폴더가있는 것을 좋아합니다.

절대 경로를 사용하는 것은 정말 나쁜 생각입니다. 응용 프로그램을 Jar 파일로 배포하거나, 웹 서버에 배포하거나, 단순히 다른 장소로 이동하려는 경우를 생각해보십시오.

살펴 보자 당신이 (예를 들어, 소스의 일부로서) 속성이 클래스 경로에 파일이있는 경우,

http://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html#getResourceAsStream-java.lang.String-

을 다음 독립적 곳의 같은 방법으로로드 할 수 있습니다 너는 (병 안에 있더라도).

관련 문제