2013-01-13 2 views
0

Java Info.plist Key Reference for Mac에 따르면 $ APP_PACKAGE 변수를 사용하여 Mac 응용 프로그램 번들의 루트 디렉토리에 액세스 할 수 있어야합니다. 그래서 나는 목차/자원/폴더에 파일을 저장하고 그러나

new File("$APP_PACKAGE/Contents/Resources/MyFile.txt") 

를 호출하여 액세스 할 수 있는지 그림이 작동하지 않고 단순히 오류를 찾을 수없는 파일을 얻을. 그 중요한 경우,

new File("$APP_PACKAGE/Contents").exists() //Returns false 
System.out.printline(new File("$APP_PACKAGE").getParent()) //Returns an empty string 

내가 맥 OS X 응용 프로그램 번들로 이클립스의 수출을 사용하여 맥 OS X 번들을 생성했다 : 또한, 나는 내가 문제를 좁힐 수 있는지 확인하기 위해 다음과 같은 노력했습니다. 어떤 도움 (또는 적절한 해결 방법)을 부탁드립니다!

답변

0

값을 출력 할 수 있습니다. 응용 프로그램이 작업 디렉토리가 무엇인지 알기 힘들었지 만 응용 프로그램이있는 폴더라는 것을 알아 냈습니다. 그런 다음 응용 프로그램을 디렉토리로 참조하여 해결할 수있었습니다 :

new File("MyApp.app/Contents/Resources/MyFile.txt").exists() //Returns true!!! 
나는 또한 내가 내의 Info.plist 파일에 다음을 추가 this blog post에 제안을 발견 추가 할

는 :

<key>WorkingDirectory</key> 
<string>$APP_PACKAGE/Contents/Resources</string> 

불행하게도,이 맥 OS 10.7에서 작동하지 않는 것 .5 작업 디렉토리는 응용 프로그램이있는 폴더로 재설정됩니다.

0

값이 환경 변수로 설정된 경우 을 사용하여 실제 값인 APP_PACKAGE을 먼저 얻은 다음이를 사용하여 File 개체를 만들 수 있습니다. 이 변수가 단지 소비되는 경우가 아니라 자바 과정에서 plist 파일에서 읽는 동안 궁금하여 given link의 독서에서 말했다

String appPackage = System.getEnv("APP_PACKAGE"); 
new File(appPackage + "/Contents/Resources/MyFile.txt"); 

. 변수가 실제로 자바 프로그램에 대한 환경 변수로 주어지지 않으면, 다음과 같은 구조

/Contents 
    /MacOS 
    YourBinary 
    /Resources 
    YourFile.txt 

따라을해야 내가 Mac에서 응용 프로그램의 포장을 기억으로부터 쉽게 Contents 디렉토리에있는 파일을 검색 할 수 있습니다 앱의 현재 작업 디렉토리 (기본값은 /Contents/MacOS 일 것)에서 ../Resources/YourFile.txt을 사용하여 올바른 경로를 검색 할 수 있습니다. 현재 작업 디렉토리를 모르면 new File(".").getAbsolutePath()

+0

System.getenv ("APP_PACKAGE")가 나를 위해 빈 문자열을 반환합니다. – Thunderforge

+0

@Thunderforge 작동하는 경우 제 편집보기. – Alex

+0

Mac OS X 번들 (필요한 모든 JAR 파일을 보유하고있는 Resources 폴더 안에 Java 폴더가 있음)의 구조가 정확합니다. 불행히도 ../Resources/YourFile.txt가 작동하지 않고 새로운 File ("."). getAbsolutePath()가 NullPointerException을 발생시킵니다. getPath()와 동일합니다. – Thunderforge