2013-06-21 4 views
0

Tomcat에 Java 웹 응용 프로그램이 배포되어 있으며 webapp의 디렉토리에있는 특정 파일을 읽어야합니다.Webapp에서 Tomcat의 파일을 찾을 수 없지만 경로가 시스템에 존재합니다.

가 읽으려고 경로 :

String path = "C:\\Program Files\\Apache Software Foundation\\Tomcat 7.0\\webapps\\my-server\\config\\myfile.csv"; 
File file = new File(path); 
if(file.exists()) 
    //read the file... 

file.exists() false를 반환하지만 Windows 탐색기에서 해당 경로를 탐색 할 수 있습니다. 이 권한 문제가 있습니까? 무엇이 잘못 되었을지에 대한 단서가 있습니까? 나는 매우 길다.

+0

를 사용 하는가? – sunrize920

+1

왜 클래스 패스에서 리소스를 읽지 않습니까? – condit

+0

Windows에서 슬래시를 사용하면 그 모든 헛소리를 잊어 버릴 수 있습니다. – raffian

답변

2

당신이하려는 것을 달성하는 가장 좋은 방법과는 거리가 멀습니다. 한 가지로 그것은 매우 부서지기 쉽습니다.

당신은 왜 전달 후면에서 문자열의 끝에있는 슬래시를 변경합니까 ServletContext.getResourceAsStream("/config/myfile.csv")

0

내가 말하고자하는 첫 번째 것은 '\'를 '\'로 대체하는 것입니다. 이것은 CSV가에있는 특정 폴더에 대한 보안 권한을 살펴 있습니다. 작동하지 않는 경우

사용자 everyone을 추가하고 읽기 액세스 할 수 있습니다.

또한 배치 된 전쟁의 특정 위치에서 파일을 읽을 수있는 Java Enterprise 기능을 사용할 수 있으므로 하드 코드 된 경로를 설정하는 것이 파일을 읽는 가장 좋은 방법은 아닙니다. 과 같이 백 슬래시를 이스케이프

0

시도 :

String path = "C:\\Program Files\\Apache Software Foundation\\Tomcat 7.0\\webapps\\myserver\\config\\myfile.csv"; 

그리고 나는 또한 당신이 '파일'에 잘못된 참조를 만들 것으로 나타났습니다.

if(File.exists()) 

방금 ​​잘못 복사 한 것일 수 있습니다. :). 그렇지 않으면 나도 몰라. 희망이 도움이됩니다.

+0

그 중 대부분은 복사 오류를 복사합니다. 실제 코드는 아니지만 경로가 해석되는 String입니다. –

-1

우선, 절대 경로를 사용해서는 안되며, 다른 곳에서 배포 할 때 누가 경로를 사실로 유지할 것인지 알고 있습니다. 그림과 같이 상대 경로를 사용할 수 있습니다.

String contextPath = request.getContextPath(); 

그것은 당신이 또한 플랫폼 독립을위한 슬래시 대신 System.getProperty("file.separator");를 사용

contextPath+="config\\myfile.csv" 

로 경로를 제공 할 수 있습니다, 당신의 웹 애플리케이션 디렉토리를 제공 할 것입니다.

+0

contextPath는 사용자가 생각하는 것을 반환하지 않습니다. –

+0

@MarkThomas는 내가 무엇을 반환하는지 말할 수 있습니다. 나는 항상 웹 응용 프로그램의 컨텍스트를 반환했다고 생각했습니다. – cherit

+0

컨텍스트 경로를 반환하지만 파일 시스템 경로와 아무런 관련이 없습니다. getRealPath()를 생각해 보았을 수도 있지만 작동하지 않을 수도있는 일도 마찬가지입니다. –

관련 문제