2012-05-12 4 views
0

NB의 다른 소스 패키지에 응용 프로그램 데이터 및 코드를 보관하고 싶습니다 (Java 패키지와 혼동하지 마십시오).File 객체와 다른 NetBeans 패키지

그래서 이번에했습니다. 불행하게도 한 패키지에서 다른 패키지로 File 객체를 통해 파일을 가져올 수 없습니다. 여기 내 패키지 구조

Source Packages 
    |-[J]basicstuff 
    |-[J]net.abc.utils 
    assets 
    |-[F]Images 
    |-[F]Layouts 

전설이다 :

  • 표시 없음 - NB의 프로젝트 속성에서 추가 된 소스 패키지는
  • [J] 표준 자바 패키지
  • [F] -로 만든 데이터 폴더 파일 관리자

내 자신의 GUI 시스템을 사용하기 때문에 사용자 정의 레이아웃 로더가 있습니다. 레이아웃은 애셋/레이아웃에 배치 된 JSON 텍스트 파일입니다. 불행히도 내 레이아웃 관리자 (net.abc.utils의 다른 클래스)는로드 할 수 없습니다. 내가 무엇을하더라도, 나는 그것을 적재 할 수 없다.

나는

File layout = new File("assets/Layouts/layout.txt"); 

다음
File layout = new File("../../../assets/Layouts/layout.txt"); 

그런 다음 나는 그것이의 src 디렉토리를 포함하여 위의 네 개의 디렉토리입니다 기억 시도했습니다.

File layout = new File("../../../../assets/Layouts/layout.txt"); 

하지만 작동하지 않았습니다.

심지어

File layout = new File("../../../../Layouts/layout.txt"); 

File layout = new File("../../../Layouts/layout.txt"); 

을 시도하지만 물론 그 또한 작동하지 않았다. 너 나 좀 도와 줄 수있어?

+0

당신은 이전 질문으로 돌아가 사람들이 더 기꺼이 당신에 응답 할 수 있도록, 최선의 답변을 받아 들여야한다. –

답변

1

응용 프로그램이있는 환경에 따라 다름 (독립, 에는 ApplicationServer), 당신은 적절한ClassLoader를 사용해야합니다. 이 같은

시도 뭔가 : 사용하기 위해

private static InputStream getResourceAsStream(String resource) throws FileNotFoundException { 
    String stripped = resource.startsWith("/") ? resource.substring(1) : resource; 
    InputStream stream = null; 
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
    if (classLoader != null) { 
     stream = classLoader.getResourceAsStream(stripped); 
    } 
    if (stream == null) { 
     stream = MyClass.class.getResourceAsStream(resource); 
    } 
    if (stream == null) { 
     stream = MyClass.class.getClassLoader().getResourceAsStream(stripped); 
    } 
    if (stream == null) { 
     throw new FileNotFoundException("Resource not found: " + resource); 
    } 
    return stream; 
} 

:

MyClass.getResourceAsStream("Layouts/layout.txt"); 
+0

글쎄, 내 애플은 독립형이다. 또한 메인 클래스는 basicstuff 패키지에 있고 layoutmanager 클래스는 net.abc.utils 안에 있습니다 –

+0

또한 리소스는 net.abc.utils.layoutmanager.java에로드되고 layoutmanager의 인스턴스에 의해 main 함수에 전달됩니다. MyClass는 무엇을 의미합니까? –

+0

OK, 훌륭하게 작동합니다. –