現在、私のJavaプログラムでは、プロジェクトフォルダーにあるファイルにアクセスしています。ファイルをロードするとき、そのパスは「./src/package/package/file.txt」です。プログラムを実行可能ファイルにビルドすると、機能しません。
ファイルを.jarの外に配置したいのですが、同じフォルダー内で、どうすればこれを実現できますか?
サミシャル
現在、私のJavaプログラムでは、プロジェクトフォルダーにあるファイルにアクセスしています。ファイルをロードするとき、そのパスは「./src/package/package/file.txt」です。プログラムを実行可能ファイルにビルドすると、機能しません。
ファイルを.jarの外に配置したいのですが、同じフォルダー内で、どうすればこれを実現できますか?
サミシャル
のように同じフォルダにある場合は、相対パスを使用できます./file.txt
。これは、コンパイルされたJARでも引き継がれるはずです。
それ以外の場合、同じマシンを使用する予定で、ファイルの配置に自信がある場合は、絶対パスを使用できますが、お勧めしません。
Because the relative path is relative to where your command prompt is when you execute the program, not from where the program lives.
You somehow need to tell the program where to find resources. Most people use a .sh/.bat script to figure out where the script itself lives, and either pass -D flags or set the classpath based on that location.
as a note, I $0 gives you the script as it was run on the command line in linux (it could be relative or absolute), and you can use dirname from there to find it's directory, and alter the java command line.
in windows %~dp0 gives you the directory of the batch script which was run, and you can use that to form your java command line.
を使用Class.getResourceAsStream
して取得できますInputStream
。jar パッケージでも機能します。File
APIを使用して jar ファイル内のファイルに直接アクセスすることはできません。
InputStream ins = Class.getResourceAsStream("/gigadot/exp/resource.properties");
詳細については、http://blog.gigadot.net/2010/10/loading-classpath-resources.htmlを参照してください。