0

Mac用のJavaInfo.plistキーリファレンスによると、$ APP_PACKAGE変数を使用して、Macアプリケーションバンドルのルートディレクトリにアクセスできるようになっているはずです。したがって、Contents / Resources /フォルダーにファイルを保存し、次のように呼び出すことでアクセスできると思います。

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

必要に応じて、EclipseのExport to MacOSXアプリケーションバンドルを使用してMacOSXバンドルを生成しました。任意の助け(または適切な回避策)をいただければ幸いです!

4

2 に答える 2

1

私はそれを考え出した!アプリが作業ディレクトリを教えてくれるのに苦労しましたが、それがアプリケーションのあるフォルダであることがわかりました。次に、アプリをディレクトリと呼ぶことで解決できました。

new File("MyApp.app/Contents/Resources/MyFile.txt").exists() //Returns true!!!

また、このブログ投稿で、info.plistファイルに以下を追加するという提案を見つけたことを追加したいと思います。

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

残念ながら、これはMac OS 10.7.5では機能しないようで、作業ディレクトリはアプリケーションが存在するフォルダにリセットされるだけです。

于 2013-01-13T18:47:02.440 に答える
0

値が環境変数として設定されている場合はSystem.getEnv()、最初にの実際の値を取得してから、それを使用してオブジェクトをAPP_PACKAGE作成するために使用できます。File

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

とは言うものの、与えられたリンクplistの読み取りから、この変数は、Javaプロセスではなく、ファイルからの読み取り中に消費されただけなのだろうかと思います。変数が実際にJavaプログラムに環境変数として指定されていない場合、ContentsMacでのアプリのパッケージ化には次のアーキテクチャが必要であることを覚えているので、ディレクトリ内のファイルを簡単に取得できます。

/Contents
  /MacOS
    YourBinary
  /Resources
    YourFile.txt

アプリの現在の作業ディレクトリに応じて(デフォルトでに設定する必要があると思います/Contents/MacOS)、を使用して正しいパスを取得できます../Resources/YourFile.txt。現在の作業ディレクトリがわからない場合は、次の値を出力できます。new File(".").getAbsolutePath()

于 2013-01-13T08:14:59.230 に答える