web-dev-qa-db-ja.com

Classフォルダの外からJavaのプロパティファイルを読み取る方法は?

メインクラスへの次のパス構造があります。

D:/Java/myapp/src/manClass.Java

そして、私はプロパティファイルを入れたい

D:/Java/myapp/config.properties

ファイル名とその他の構成が含まれます。次のようにプロパティファイルにファイル名を設定します:file=file_to_read.txt

このfile_to_read.txtD:/Java/myapp/folder_of_file/に配置されます

メインクラスは最初にプロパティファイルからファイル名を読み取り、次にファイルからコンテンツを取得します。

config.propertiesfile_to_read.txtの両方がsrc/とともにmainClass.Javaにある場合、これを行うことができます。しかし、私はそれをやりたい方法で成功することができませんでした。

誰もこれで私を助けることができますか? myappフォルダーをドライブ内の任意の場所に配置したい場合はどうすればよいかについての提案が必要です。上記で説明した内部構造と同じで、プログラムは正しく機能します。

また、プロジェクトのビルド後に作成されたjarからジョブを実行したい場合、問題なくそれを行うことができるというあなたの提案が必要ですか?

私はプロパティファイルを読むために次のように試しました:

        URL location = myClass.class.getProtectionDomain().getCodeSource().getLocation();

        String filePath = location.getPath().substring(1,location.getPath().length());

        InputStream in = myClass.class.getResourceAsStream(filePath + "config.properties");
        prop.load(in);

        in.close();

        System.out.println(prop.getProperty("file"));

ただし、プロパティファイルからgetPropertyを取得しようとすると、エラーが発生します。ありがとう!

21
flyleaf

Java from Classフォルダー外のプロパティファイルの読み取り方法

固定ディスクファイルシステムパスでFileInputStreamを使用します。

InputStream input = new FileInputStream("D:/Java/myapp/config.properties");

むしろ、代わりにクラスパスでカバーされている既存のパスの1つに移動するか、元のパスD:/Java/myapp/をクラスパスに追加することをお勧めします。その後、次のようにして取得できます。

InputStream input = getClass().getResourceAsStream("/config.properties");

または

InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties");
32
BalusC

皆さんの提案に感謝します。私はこの方法で仕事をしました:

        Properties prop = new Properties();
        String dir = System.getProperty("user.dir");
        InputStream in = new FileInputStream(dir + "/myapp/config.properties");
        prop.load(in);
        in.close();
        String filePath = dir + "/myapp/folder_of_file/" + prop.getProperty("file"); /*file contains the file name to read*/
9
flyleaf
Properties property=new Properties();
property.load(new FileInputStream("C:/Java/myapp/config.properties"));
4
codehacker

絶対パスを指定する必要がありますが、開発環境と運用環境などを切り替えるのが難しくなるため、絶対パスをハードコーディングしないでください。

コードのSystem.getProperty( "basePath")を使用してアクセスできるシステムプロパティからファイルのベースパスを取得できます。これは、絶対パスを作成するためにファイル名の先頭に追加する必要があります。

アプリケーションの実行中に、Javaコマンドラインで次のようにパスを指定できます。

Java -DbasePath="/a/b/c" ...

...は、プログラムを実行するためのJavaコマンドへの現在の引数を意味します。