- PR -

propertiesファイルのFileNotFoundについて

1
投稿者投稿内容
てーらーめいど
会議室デビュー日: 2007/04/24
投稿数: 17
投稿日時: 2007-04-26 14:30
以下のフォルダ構成でソースを作りました。

C:¥Work
|-------¥com¥test¥app¥Exec.java
|-------¥com¥test¥etc¥Hello.java
|-------¥com¥test¥etc¥test.properties
コード:
 
 
Exec.java:
package com.test.app;

import java.io.FileInputStream;
import java.util.Properties;

import com.test.etc.Hello;

public class Exec {

	public static void main(String[] args) {
		try{
			Hello samp = new Hello();
			System.out.println(samp.hello());

			Properties prop = new Properties();
			prop.load(new FileInputStream("com/test/etc/test.properties"));
			
			System.out.println(prop.getProperty("key", "none"));

		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

Hello.java:
package com.test.etc;

public class Hello {

	public String hello() {
		return "Hello World!";
	}
	
}

test.properties:
key=property_test




コンパイルを行い、C:¥Workフォルダで実行すると成功します。
C:¥work>java com.test.app.Exec
Hello World!
property_test

実行する場所を変更し、classpath指定すると、propertiesファイルが
FileNotFoundとなります。

C:¥>java -cp c:¥work com.test.app.Exec
Hello World!
java.io.FileNotFoundException: com¥test¥etc¥test.properties (指定されたパスが見
つかりません。)

「Hello World!」が出力されているという事はHelloクラスが見れているので
クラスパスはちゃんと通っていると思うのですが、propertiesが見つからないのは
何故でしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-04-26 14:39
System.out.println(new File(".").getAbsolutePath());
を実行して出た結果が、相対パスのルートとなる場所です。

実際にその相対パスでは見えないのでしょう。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-04-26 15:02
プロパティファイルなどはClassLoader.getResourceAsStreamを利用して取得するほうがよいでしょう。
jarにアーカイブしたりしても大丈夫ですからね。
こちらの手法であればクラスパスが通っていれば実行時のパスに依存しません。

コード:
  // 起動に用いたクラスを読み込んだクラスローダを取得
  ClassLoader classLoader = Exec.class.getClassLoader();
  InputStream is = classLoader.getResourceAsStream("com/test/etc/test.properties"));

かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-04-26 15:36
クラスベースでよいなら、java.util.ResourceBundleが便利ですよ。

追記:
クラスベースじゃなくて、クラスパスベースですね・・・

[ メッセージ編集済み 編集者: かつのり 編集日時 2007-04-26 17:32 ]
下請け
ベテラン
会議室デビュー日: 2002/12/11
投稿数: 50
お住まい・勤務地: 大阪
投稿日時: 2007-04-26 15:59
SunのSJC-Pの勉強することをお勧めします。

つか、全部テキストに載ってんべ。
てーらーめいど
会議室デビュー日: 2007/04/24
投稿数: 17
投稿日時: 2007-04-26 17:23
かつのりさん、nagiseさん、ありがとうございます!

ResourceBundle、getResourceAsStream両方ともやりたい事ができました!!!

下請けさん、こんにちは。
SJC-Pは資格だと思うのですが、これ用の問題集とかで勉強すれば良いってことですね。
色んな本があって、どれにすれば良いか悩んでいたので助かります。
1

スキルアップ/キャリアアップ(JOB@IT)