2012-09-04 3 views
1

여러 종속성이있는 거대한 명령 줄 응용 프로그램에서 현재 사용자 경로를 얻으려고합니다. 매번 "." 가 사용되면, 현재 사용자 경로 (호출이 이루어지는 위치)가 아닌 응용 프로그램 경로 (jar이있는 위치)를 제공합니다.Java에서 응용 프로그램 경로가 아닌 현재 사용자 경로 얻기

그래서,이 실행 된 경우 :.

File file = new File("."); 
System.out.println(file.getCanonicalPath()); 

나에게

를 응용 프로그램이 존재하는 경로를 제공하지만 별도의 작은 응용 프로그램을 작성하고, 동일한 코드를 사용하는 경우. jar를 다른 디렉토리에서 호출하면 현재 사용자 경로가 제공됩니다.

JSAP 명령 줄 구문 분석기를 사용하여 명령 줄 인수를 사용하고 있습니다. 어떻게이 문제를 해결할 수 있습니까? 큰 응용 프로그램에서 응용 프로그램 경로가 아닌 현재 사용자 경로를 얻길 원합니다.

무엇이 다른 행동을하게합니까?

System.getProperty("user.home"); 
+0

가에서 사용자가 즉, 귀하의 응용 프로그램을 시작하는 위치를 app/app.jar'? – Baz

+0

예, 사용자가 jar 파일을 호출하는 디렉토리를 원합니다. 그것은 작은 독립형 애플 리케이션에서 작동하는 것 같다. 큰 응용 프로그램이 아니라 비록 내가 코드를 응용 프로그램의 메인 라인에 삽입했다. – user724535

답변

3

같은 당신이 원하는

+0

맞습니다. 애플리케이션이 배치 디렉토리가 아닌 사용자 디렉토리에서 직접 호출되는 것처럼 동작하도록 배치 파일을 변경할 수 있는지 알고 있습니까? 나는 코드가없는 커맨드 라인 파서를 사용하고있다. 파일 경로는 다양한 위치에서 서로 다른 많은 명령 행 인수에 사용됩니다. Java 코드를 변경하지 않는 것이 좋습니다. – user724535

+2

아마도 배치 파일이 디렉토리를 jar 파일의 디렉토리로 변경하는 이유가있을 것입니다.배치 파일을 jar 파일의 디렉토리로 변경하지 않기로 변경하면 아마도 다른 것을 깨뜨릴 것입니다. 이제는 수정이 더 쉬운 Java 코드 인' ". == Current_Working_Directory 또는'"== Main_JAR_dir을 원하는 배치 코드/Java 코드를 수정하는 것이 더 쉽습니다. ''. '는 한 번에 두 가지를 가리킬 수 없습니다. 그것은 하나 또는 다른 것입니다. 또한 AFAIK 값을 변경할 수 없습니다. "'일단 JVM이 부팅되면,'java'가 실행되기 전에 .bat/.sh ('cd')를 통해 설정해야합니다. –

+0

방금 ​​문제를 다시 봤는데, 쉘 스크립트에서 디렉토리가 변경되는 위치를 찾을 수 없습니다. 죄송합니다.이 모든 것이 저에게 새로운 것이며 배우려고합니다! 도와 줘서 고마워! – user724535

1

http://www.mindspring.com/~mgrand/java-system-properties.htm

"user.home의"속성, 난 당신이 찾을 생각하여 "큰 응용 프로그램을 시작하는 배치 파일 (/ 쉘 스크립트) "Java를 시작하기 전에 디렉토리를 주 jar 파일의 디렉토리로 변경하기 때문에 큰 응용 프로그램이 jar 파일의 디렉토리를 반환하는 동안 간단한 테스트 응용 프로그램이 new File(".")의 사용자 작업 디렉토리를 반환합니다. 위에서 언급 한 바와 같이 당신이 얻을하려는 경우, 다음

set savedcwd=%cd% 
... later on ... 
java "-Dsavedcwd=%savedcwd%" 

를 응용 프로그램

String savedcwd = System.getProperty("savedcwd"); 
1
String currentDir = new File(".").getAbsolutePath(); 
OR 
System.getProperty("user.dir") 
+0

getAbsolutePath(); 나에게 같은 길을 준다. – user724535

0

1)에 :

자바에 전달 후 배치 파일의 초기 사용자의 CWD를 저장하고 시도 "현재 디렉토리", 한 가지 방법은 사용하는 것입니다 File(".").getAbsolutePath()

2) 사용자의 $ PATH 변수를 얻으려면 (또는 environ , 표준 변수), System.getenv() 사용 그는`자바 -jar ./path/to/ 호출하는 경우