2012-05-19 2 views
0

Mac 응용 프로그램 번들 (모든 응용 프로그램을 포함하지만 사용자에게 단일 실행 파일처럼 보이는 폴더 구조)으로 패키징하는 Java 응용 프로그램이 있습니다.MacOSX의 Java : 번들의 파일에 액세스하는 방법

내 문제 : 로컬 폴더 (".")에 일부 설정 파일을 읽고 쓰고 있습니다. 그러나 Mac에서는이 폴더가 응용 프로그램 번들이있는 폴더 인 것처럼 보입니다. (대개 "응용 프로그램"폴더이므로 분명히 원하지 않습니다.)

내 질문 : 어떻게 파일을 저장할 수 있습니까? 내가 프로그래밍 정규화 된 폴더를 계산하기 위해 번들 이름을 검색 할 수 있습니까? 번들?

을 내가 클래스 로더의 길을 갈을 시도 할 수 있습니다 알고 있지만, 나는 그 (보안상의 이유로)를 피하기 위해 싶습니다.

을 아니면 응용 프로그램 캐시 및 구성 데이터를 로컬에 저장하는 더 좋은 방법이 있습니까?

+0

링크를 읽어 보시기 바랍니다. 그렇게하지 않으면 좋은 대답을 얻으면 스스로 답해야합니다. 질문에 완전히 답하지 않더라도 좋은 일을 보상해야합니다. – Gray

+0

문제가 해결되면 답변을 수락합니다 (또는 좋은 해결 방법입니다). 선행은 투표로 보상을 받는다. 해답이 없으면 아무 것도 받아 들여지지 않습니다. 그리고 내가 그 문제를 아직 풀지 않았기 때문에 나는 스스로에게 대답하지 않았다. – Daniel

답변

1

좋아, 기본 답변/해결책은 :하지 마십시오.

원래 내가 원했던 이유는 로컬 HD에 더 많은 양의 데이터를 캐시하는 것이었기 때문입니다. Java 환경 설정은 구성 데이터 (즉, 소량의 데이터)에 적합하지만 메가 바이트 크기 범위의 데이터는 처리하지 못합니다.

내 솔루션 : 단순히 사용자의 홈 폴더 (System.getProperty("user.home"))에 폴더를 만들에서라도 (System.getProperty("os.name").contains("Mac OS X"))에

. 그 폴더의 접두어를 .으로 지정하여 사용자에게 보이지 않도록합니다. 이렇게하면 폴더에 대한 쓰기 권한이 있습니다. 사용자가 복사하는 위치에 따라 .app 폴더의 문제 일 수 있습니다.

)이 폴더를 System.getenv("APPDATA") 디렉토리에 만듭니다 (이 ENV 변수는 Windows 시스템에 존재합니다.

지금 나는 (심지어 관리자 권한없이) 파일 시스템에 대한 전체 액세스 권한을 가지고 있고 원하는만큼 데이터를 저장할 수 있습니다.

+2

사실, 캐시 데이터는'(~)/Library/Caches/'또는 (영구적 인 경우 큰 데이터베이스와 같은)'(~)/Library/Application Support/'와 같은 형식이어야합니다. 나는 내 홈 디렉토리에 큰 캐시가있는 점 파일을 원하지 않는다는 것을 알고 있으며 아마도 나는 혼자가 아닙니다. – You

+0

좋은 지적이지만, 나는 이것을 대신 사용하겠다. (거기에 글을 쓸 루트 권한이 없다고 가정). 감사! – Daniel

1

Mac OS X Finder는 디렉토리의 이름이 .app 디렉토리를 응용 프로그램으로 처리합니다. 오른쪽 버튼을 클릭하여 패키지 내용보기. I/O 목적으로 정상적인 디렉토리로 남아 있습니다. 이 project은 예입니다. 애플리케이션 번들에 상대적인 경로에 대해서는 answer을 참조하십시오.

부록 : 응용 프로그램 캐시와 구성 데이터를 로컬에 저장하는 더 좋은 방법이 있습니까?

example 인용 용도 java.util.prefs.Preferences하지만 javax.jnlp.PersistenceServicealternative이다.

+0

죄송합니다.이 대답은 받아 들일 수없는 것으로 판명되었습니다. – trashgod

+0

죄송합니다. 좋은 질문입니다. 제 질문에는별로 도움이되지 않습니다. 문제는 폴더의 이름 (예 : .app 폴더의 이름은 무엇입니까?)을 얻는 방법입니다.) 환경 설정을 사용하면 캐시 데이터에 적합하지 않습니다 (작은 데이터 볼륨 만 처리 할 수 ​​있음) – Daniel

+0

Mac OS X에서'java.util.Preferences'는'~/Library/Preferences'에있는 XML 파일을 통해 구현됩니다. 내 최대 규모는 약 1 메가 바이트입니다. 나는'~/.appname' 폴더를 신경 쓸 필요가 없다. '~/.netbeans'이 그 예입니다. @ 당신의 제안이 권장되는 대안입니다. – trashgod

관련 문제