2012-06-28 13 views
15

は、私は、メインクラスに次のパス構造を有する:クラスフォルダの外から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/にある場合、これを行うことができます。しかし、私がそれをしたいと思うように成功することはできませんでした。

誰でも私にこれを手伝ってもらえますか?上記の同じ内部構造を持つドライブ内の任意の場所に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にしようとしたとき、これはERRを与えます。 ありがとう!

答えて

0

設定ファイルディレクトリをランタイムクラスパスに追加すると、Class.getResourceAsStream()でアクセスできます。プロパティを読み取る方法

28

クラスフォルダ外からJavaでファイル?

固定ディスクファイルシステムのパスにFileInputStreamを使用してください。

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

はるかに良いだけの代わりにクラスパスによってカバーされ、既存のパスのいずれかに移動する、またはクラスパスに元のパスD:/java/myapp/を追加することです。

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

または

InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"); 
+1

はい、BalusCの最初のソリューションを使用してください。 – Klinetel

+0

ありがとう、それは私のために働いた。しかし、私はコメントを追加する必要があります。クラスパスにフォルダを追加すると、リソースをストリームとして取得するときにフォルダを指定する必要はなく、そのファイルが呼び出されたフォルダ内にある場合でもgetResourceAsStream( "/ config.properties")を呼び出すだけですresources –

+1

@Jesus:はい、それはすでに(デフォルト)クラスパスにある他のすべてのフォルダと同じ方法でフォルダの内容を使用することを意図しています。 – BalusC

6

をご提案してくれてありがとうみんな:次のように次に、あなたがそれを得ることができます。あなたは絶対パスを指定する必要が

 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*/ 
+1

これは実際には移植性がありません。または、アプリケーションのインストールガイドでこれを明確に文書化する必要があります。クラスパスに入れたり、パスをクラスパスに追加するだけで簡単に行えます。 – BalusC

+0

@BalusC、実行時にプロパティファイルを編集したいのですが? – gdrt

0

しかし、あなたはそのようにハードコード、それは開発と生産環境などの切り替えのために難しくを行いますいけない..:私はこの方法で仕事をしてきました

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

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

java -DbasePath="https://stackoverflow.com/a/b/c" ... 

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

2
Properties property=new Properties(); 
property.load(new FileInputStream("C:/java/myapp/config.properties")); 
関連する問題