メインクラスへの次のパス構造があります。
D:/Java/myapp/src/manClass.Java
そして、私はプロパティファイルを入れたい
D:/Java/myapp/config.properties
ファイル名とその他の構成が含まれます。次のようにプロパティファイルにファイル名を設定します:file=file_to_read.txt
このfile_to_read.txt
はD:/Java/myapp/folder_of_file/
に配置されます
メインクラスは最初にプロパティファイルからファイル名を読み取り、次にファイルからコンテンツを取得します。
config.properties
とfile_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を取得しようとすると、エラーが発生します。ありがとう!
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");
皆さんの提案に感謝します。私はこの方法で仕事をしました:
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*/
Properties property=new Properties();
property.load(new FileInputStream("C:/Java/myapp/config.properties"));
絶対パスを指定する必要がありますが、開発環境と運用環境などを切り替えるのが難しくなるため、絶対パスをハードコーディングしないでください。
コードのSystem.getProperty( "basePath")を使用してアクセスできるシステムプロパティからファイルのベースパスを取得できます。これは、絶対パスを作成するためにファイル名の先頭に追加する必要があります。
アプリケーションの実行中に、Javaコマンドラインで次のようにパスを指定できます。
Java -DbasePath="/a/b/c" ...
...は、プログラムを実行するためのJavaコマンドへの現在の引数を意味します。