2012-12-28 3 views
0

가 나는 아래의 코드를 작성했지만파일 객체가

File test= new File("/templates/xmdForModel.xsd"); 

템플릿 폴더를 작동하지 않는 그있는 내 웹 응용 프로그램에서 간단한 자바 클래스가 자바 웹 응용 프로그램에서 작동하지 않는 것은 응용 프로그램의 루트 폴더 안에 .

파일의 위치는 ---->application-root/package/test.java
파일의 위치> --------입니다 application-root/testRoot/template/xmdForModel.xsd

오류

스키마 문서 '파일을 읽지 못했습니다 : /templates/xmdForModel.xsd ', 1) 문서를 찾을 수 없기 때문에; 2) 문서를 읽을 수 없습니다. 3) 문서의 루트 요소가 아닙니다.

+0

정지 및 파일 리드, 그때 난 당신이 파일'에서'testRoot을 /'누락 생각 그것을 – radai

+1

을 수정 위치를 확인할 test.getCanonicalPath()를 평가 해 ("/ 템플릿/xmdForModel.xsd") ; ' – Abubakkar

+0

"작동하지 않는 것"은 무엇입니까?어떤 코드 나 오류 메시지 또는 뭔가를 볼 수 있습니까? – Ben

답변

1

웹 응용 프로그램 내부의 파일에 대한 파일 이름을 조회하려면 ServletContext#getRealPath을 사용할 수 있습니다.

그러나 클래스 로더를 사용하여 Class#getResourceAsStream을 사용하여 리소스를로드하는 것이 좋습니다. 이 방법은 파일이 실제로 파일로 존재하지 않는 경우에도 작동합니다 (예 : 단지 내부에만 있음).

이 파일이 사용자가 편집하거나 작성해야하는 파일 인 경우 웹 응용 프로그램 외부에 배치 한 다음 절대 경로 (예 : "/ etc/myapp/conf/xmd.xsd ")를 구성 할 수 있습니다.

+0

이 두 가지 기능을 신중하게 사용해야합니다. 반환 값은 사용하는 웹 컨테이너의 기본이기 때문에 – evilYoung

+1

@evilYoung :하지만 원하는 것은 아닌가요? – Thilo

+0

: 때로는 그렇지 않습니다. 예를 들어 Resin을 웹 컨테이너로 사용하면 반환 값은 실제 파일 경로가 아닌 resin.conf에서 설정 한 컴파일 링 프로그램 값과 관련됩니다 – evilYoung

0

File 생성자의 경로는 절대 또는 상대 경로 일 수 있습니다. '/'(Linux 기반 OS에서) 경로를 시작하면 해당 경로를 절대 경로로 간주하고 파일 구조의 루트에 파일/폴더를 만듭니다 (프로젝트의 루트가 아님) . Windows 컴퓨터에서 c : \ templates를 지정하는 것과 같습니다.

첫 번째 슬래시를 제거하고 프로그램을 실행 해보십시오. 첫 번째 슬래시를 제거하면 .java 파일의 상대적인 부분이됩니다. 그래서 ../를 사용하여 상위 폴더로 전환 할 수 있습니다. 자바 : 응용 프로그램 루트/패키지/test.java 파일 : 응용 프로그램 루트/testRoot/템플릿/xmdForModel.xsd 자바 파일에서 그래서

당신은 응용 프로그램 루트 폴더를 선택한 다음 템플릿 폴더로 디렉토리를 변경해야합니다 . 다음과 같이.

파일 x = 새 파일 ("../ testRoot/template/xmdForModel.xsd");


SRC : HTTP : //docs.oracle.com/javase/tutorial/essential/io/path.html는

/홈/샐리/statusReport는 절대 경로입니다. 파일을 찾는 데 필요한 모든 정보 은 경로 문자열에 포함되어 있습니다.

파일에 액세스하려면 상대 경로를 다른 경로와 결합해야합니다. 예를 들어 joe/foo는 상대 경로입니다. 정보가 더 이상 없으면 프로그램에서 파일 시스템 의 joe/foo 디렉토리를 안정적으로 찾을 수 없습니다. 중단 점에서이