문제

내가 만든 java 응용 프로그램를 위한"데비안 리눅스." 지금 내가 원하는 응용 프로그램를 읽어 파일이 디렉토리에 위치가 jar 파일의는 응용 프로그램이 지정됩니다.그래서 무엇을 지정하에서의 인 파일체?

File fileToBeReaded = new File(...);

무엇으로 지정하는 인수를 위해 위의 문을 지정하려면 상대적인 파일 경로를 나타내는 경로 jar 파일 응용 프로그램의 배치되었습니다?

도움이 되었습니까?

해결책

파일의 이름을 알고 있다면 물론 간단합니다.

new File("./myFileName")

이름을 모르는 경우 파일 Object의 List () 메소드를 사용하여 현재 디렉토리에서 파일 목록을 가져온 다음 원하는 파일을 선택할 수 있습니다.

다른 팁

상대 경로 사용 java.io.File 현재 작업 디렉토리에 완전히 의존합니다. 이것은 항아리를 실행하는 방식과 다릅니다. 예를 들어 /foo 그리고 당신은 항아리를 실행합니다 java -jar /bar/jar/Bar.jar 그런 다음 작업 디렉토리가 여전히 있습니다 /foo. 하지만 당신이라면 cd 에게 /bar/jar 그리고 실행 java -jar Bar.jar 그런 다음 작업 디렉토리입니다 /bar/jar.

항아리가있는 루트 경로를 원한다면 중 하나는 다음과 같습니다.

File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());

이것은 JAR 파일의 루트 경로를 반환합니다 (IOW ClassPath 루트). ClassPath 루트와 관련하여 자원을 배치하면 다음과 같이 액세스 할 수 있습니다.

File resource = new File(root, "filename.ext");

또는 당신은 또한 사용할 수 있습니다.

File resource = new File(Thread.currentThread().getContextClassLoader().getResource("filename.ext").toURI());

나는 이것이 트릭을 수행해야한다고 생각합니다.

File starting = new File(System.getProperty("user.dir"));
File fileToBeRead = new File(starting,"my_file.txt");

이렇게하면 파일이 user.dir 앱의 작업 디렉토리가 될 속성.

탈출 캐릭터 문제에 대해 묻고 있습니까?

이 경우라면 뒤로 슬래시 대신 앞쪽 슬래시를 사용하십시오.

"C : /users/you/desktop/test.txt"

대신에

"C : Users you goodtop test.txt"

당신이 질문을 할 수있는 당신의 클래스 로더 당신을 제공하의 위치에 항아리:

getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

...그러나 나는 것이 좋을 넣어 당신이 찾고있는 파일에 대한 내부에 jar 파일을 읽는 자원으로(getClass().getResourceAsStream( "myFile.txt" )).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top