• ベストアンサー

Tomcatプロジェクトの.propertiesファイルの置き場

当方、Tomcat5.0,Eclipseでサーブレットを開発しております。 初歩的な質問で申し訳ありませんが、プロパティファイルの置き場所が 分からず難儀しております。 どなたかご教示願います。 prop.load(new FileInputStream("C:/work/workspace/worktools/mail.properties")); 上記の様にフルパスを指定すると認識するのですが、 prop.load(new FileInputStream("mail.properties")); この様にパスを省略するとFileNotFoundExceptionが発生してしまいます。WEB-INF直下にファイルを置いてるのですが、間違いなのでしょうか?

  • Java
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#30536
noname#30536
回答No.3

FileInputStreamを相対パスで指定した場合は、JVMの起動ディレクトリがルートになります。 記憶があいまいですが、Eclipseから起動した場合は、workspaceがルートとなるじゃなかったでしょうか。 Tomcatのコンソールから起動した場合は、TOMCAT_HOMTがルートとなります。 通常はそういうことはしないので、クラスパスを通すか、WEB-INF/classeに配置し、ClassLoader#getResourceAsStreamを使います。

kagemarurx
質問者

お礼

ご回答ありがとうございます。 参考にして、以下の様にコードを変更しましたら上手くいきました。 private String fileName = "mail.properties"; private InputStream properties = null; public MailUtil() { this.properties = this.getClass().getClassLoader().getResourceAsStream( this.fileName ); } ちょっと裏技っぽいですが、読めたので良しとします。 ありがとうございました。

その他の回答 (2)

  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.2

サーブレットのコンテキストパスを取得し、 フルパスの形にしてあげなければ ファイルは読込めません。 prop.load(new FileInputStream(servlet.getServletConfig().getServletContext().getRealPath("/mail.properties"))); 面倒であったら、Bundleの使用をお勧めします。

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

classes\resources の下だと思われます。 Eclipseで開発していて、tomcatと連携してデバッグしているのなら、 src\resources の下に配置しておくと、 classes\resources の下に自動的に配置されることになるとおもいます。

kagemarurx
質問者

補足

ご回答ありがとうございます。 早速試したところ、やはり認識されませんでした。 java\resoucesと言うフォルダがあったのでそこに配置してみましたが、やはり認識されませんでした。 一体どう言う事なんでしょうか? クラスパスの設定が間違っているのでしょうか? 悩んでいます。

関連するQ&A

  • Tomcatのpropertiesファイルの読み込みについて

    Tomcat4.1でWEB-INF/classes/resource/a.propertiesというリソースファイルを <a.class>.getResourceAsStream("/resource/a.properties"); と記述して読み込もうとしています。実際この記述でサーバ(Solaris)上ではうまく読み込めているのですが同じソースにもかかわらずローカルの開発環境(All-In-One EclipseのTomcat)ではうまくいきません。 eclipseのTomcatのクラスパス周りの設定だとは思っていますがどこを設定していいかわかりません。 WEB-INF/classes/配下は特に設定が必要ないのでは?とも思いますし・・。 ちなみにサーブレット・その他のクラスなどは問題なく動いてるようです。 初めての質問ですのでちょっとわかりにくいかも知れませんが もしわかる方がいらっしゃればご回答よろしくお願いします。

    • ベストアンサー
    • Java
  • パスがとおらない・・・

    以下のようなプロジェクトがあるとします。 tomcatproject | |-WEB-INF   |   |-conf(appli.properties)   |   |-src    |    |-test(TestServlet.java) TestServletの内容は以下の通りです。(一部省略) ---------------------------------------------------- private static Properties p = new Properties(); public void init(){  try {   p.load(new FileInputStream("/tomcatproject/WEB-INF/conf/appli.properties"));  } catch (FileNotFoundException e) {   e.printStackTrace();  } catch (IOException e) {   e.printStackTrace();  } } ---------------------------------------------------- PropertiesのloadにいったときにFileNotFoundExceptionが 発生してしまうのですが、いろいろ試した結果絶対パス以外は 通らないんです・・・。(C:\eclipse\workspace\........) どうやれば相対パスで通りますか? ご教授頂ければ幸いです。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • カタカナの「ソ」以降の文字が文字化けします

    propertiesファイルから文字列を読み込む処理を行っているのですが、文字列にカタカナの「ソ」がはいると、「ソ」自体とそれ以降の1文字が文字化けしてしまいます。 これには何か対処方法があるのでしょうか? こんな感じの処理を行っています。 【propertiesファイルの内容】 path=C:\\MyWork\\ソース\\download 【読み込み処理】 FileInputStream fis = new FileInputStream(propfile); Properties prop = new Properties(); prop.load(fis); String sjs_path = getString(prop.getProperty("path"); String uni_path = new String(sjs_path.getBytes("iso-8859-1"), "Shift_JIS"); アドバイスよろしくお願いいたします。

    • ベストアンサー
    • Java
  • プロパティリストをVectorに出力したい場合

    プロパティファイルの中身をVectorに入れたいのですが、 APIを見ると、 list(PrintStream out) 指定された出力ストリームに、プロパティリストを出力します。 と書かれてありますが、PrintStream outの部分をどうやればいいのかかわかりません・・・。 ご教授いただけたら幸いです。 よろしくお願いします。 Properties prop = new Properties(); prop.load(new FileInputStream("./test.properties")); prop.list(???);

    • ベストアンサー
    • Java
  • Javaのプロパティファイルの文字化け対策

    いつもお世話になっております。 一連の質問で大分クリアになって来たのですが、まだ課題が残っています。 xxx.propertiesファイルを作成したとします。 プロパティに日本語を設定しました。 Java上でgetProperties()をすると文字化けしてしまいます。 初歩的な質問で申し訳ありませんが、具体的な対策をご教示願います。 public String getMailSubject() throws MailSendErrorException { String subject = null; try { Properties prop = new Properties(); // プロパティファイルからキーと値のリストを読み込む prop.load(new FileInputStream(this.properties)); subject = prop.getProperty("mail.subject"); } catch (Exception e) { e.printStackTrace(); throw new MailSendErrorException(); } return subject; } 上記のソースでmail.subjectに設定してある日本語文字列を取得したいのですが色々試しましたが上手く行きません。

    • ベストアンサー
    • Java
  • Tomcat内のJSPファイルを削除したい

    事情がありにTomcat内のフォルダを 見せなければならなくなりました。 他人にTomcat内のファルダにあるサーブレット(+Beans等のクラスファイル)と JSPのソースを見られない様にしたいです。 またその上で実行も可能にしたいのですがどうすればいいでしょうか? サーブレット等は Tomcat 7.0/webapps/MyWebSite/WEB-INF/classes以下の クラスファイル(.class)だけを残してJavaファイル(.java)を削除 するか、Eclipseでソースをエクスポートさせない様にすると Javaのソースは見れなくなると思いますが、 JSPの場合だと Tomcat 7.0/webapps/MyWebSite/以下の JSPファイル(.jsp)を削除して、 Tomcat 7.0/work/ 以下にあるJSPをサーブレットに変換後 コンパイルされたファイル(.class)を残すだけではダメな様です。 他に方法はあるでしょうか? サーブレットのソースを見られないだけでも良しと考えるべきでしょうか?

    • ベストアンサー
    • Java
  • ファイルパスが取得出来ない(Properties.getProperty使用)

    PropertiesクラスのgetPropertyメソッドを利用して 外部ファイルより値を取得しようとしています。 // ファイルパスの取得 java.util.Properties pr = new Properties(); pr.load(new FileInputStream("sample.properties")); String filePath = pr.getProperty("filePath"); fis.close(); // sample.properties filePath = C:\test\test.txt しかし、エスケープ記号?が問題で下記のようになり うまく取得出来ません。 filePath = C: est est.txt なぜこのような現象が起こるのでしょうか。 また、回避策はありますでしょうか。 よろしくお願いします。

  • ファイルよりの文字列の取り込み(Properties)

    下記のプログラムでテキストファイルに"0x5C"を含む文字列を 取り込んだ時に文字化けしてしまいます。 テキストファイルに\\を付加する逃げ方は検索して発見しましたが \\を付加を付加せずに解決する方法は有りませんでしょうか? import java.io.FileInputStream; import java.util.Properties; public class Class1 {  public static void main (String[] args) {   try {    FileInputStream oFileInputStream = new FileInputStream("c:\\test.txt");    Properties oProperties = new Properties();    oProperties.load(oFileInputStream);    String sTmp1 = oProperties.getProperty("100001T");    String sBuf1 = new String(sTmp1.getBytes("8859_1"), "MS932");    String sBuf2 = new String(oProperties.getProperty("100001M").getBytes("8859_1"), "MS932");    System.out.println(sBuf1);    System.out.println(sBuf2);   } catch (Exception oException) {    oException.printStackTrace();   }  } } /* 実行結果 可狽ナす。可狽ナす。可狽ナす。可狽ナす。 可能です。 */ /* test.txtの内容 100001T=可能です。可能です。可能です。可能です。 100001M=可能\\です。 100001S=1 100001L=0 */

    • ベストアンサー
    • Java
  • Tomcat 4.1での配備方法

    Tomcat 4.0で動作していたアプリがTomcat 4.1だと動作しません。配備方法が変わったんでしょうか? 導入時のサンプル/examplesのサーブレット/JSPは動きますが、そのContext要素の上に記述したContextのdocBaseで指定したパスのWEB-INF/classes/*.classがブラウザから呼び出せないのです(localhost:8080/.../servlet/*)。ちなみに、ドキュメントルート直下にindex.htmlをおいたところ、問題なく参照できました(localhost:8080/.../index.html)。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Tomcatのプロジェクトのクラスパスの通し方

    いつもお世話になっております。 当方、Tomcat5.xとEclipse3.2でWebアプリ(Struts使用)を開発しております。 Eclipse環境下で、JVMの設定を追加して.propertiesファイルの置き場を指定しているのですが、Tomcatのみのサーバにアプリを配置するとプロパティファイルの場所が分からなくなるらしく(CLASSPATHが通っていない?)エラーになってしまいます。 private String fileName = "mail.properties"; private String properties = null; public MailUtil() { this.properties = this.getClass().getClassLoader().getResource(this.fileName).toString(); ←ここでNullPoingter this.properties = this.properties.substring(6); } 実際に配置する際の設定方法をご教示頂けないでしょうか? 今はソースコードに実アドレスを指定して回避しておりますが、環境が変わった時などに困ってしまいます。 よろしくお願いいたします。