JAVA:IT TRICK

物理パスからプロパティファイルを読み込む

サーブレットではプロパティファイルなどのファイルを読み込むことができます。ここでは物理パスからファイルを読み込む方法について説明します。
  • このエントリーをはてなブックマークに追加
  • Clip to Evernote
  • IT TRICK RSS

サーブレットではプロパティファイルなどのファイルを読み込むことができます。ここでは物理パスからファイルを読み込む方法について説明します。

サーブレットでは、ServletContextオブジェクトのgetRealPath()メソッドを使って、Webアプリケーション上のファイルのパスをOS上の物理パスに変換することができます。

getRealPath()メソッドは、「/」からはじまるコンテキストルートからのパスを指定します。getRealPath()メソッドを使うことでWebアプリケーションに含まれるプロパティファイルなどのファイルを読み込むことができます。

また、getRealPath()メソッドで指定したファイルが存在しない場合はnullが返されます。例えば、指定したファイルがWARファイルの中にあり、パスとして返せない場合もnullが返されることがあります。Tomcatの場合は通常WARファイルを展開して動作するので問題ありませんが、アプリケーションサーバによってはWARファイルを展開せずに動作します。この場合は失敗することがあります。

以下は物理パスを取得して、プロパティファイルを読み込むサンプルです。

プロパティファイルの読込サンプル

このサンプルでは以下のプロパティファイルinit.propertiesを「WEB-INF/」の下に作成しました。このプロパティファイルを読み込んで、キーと値を画面に表示しています。

init.properties
key1=value1
key2=value2
key3=value3
key4=value4
key5=value5

init.propertiesを読み込むにはgetRealPath()メソッドを使って、引数「/WEB-INF/init.properties」でinit.propertiesの物理パスを取得しています。

また、java.util.Propertiesクラスのload()メソッドは、プロパティの読み込みを簡単に行うためのメソッドで、このメソッド以外にもプロパティを操作するためのメソッドがjava.util.Propertiesクラスにありますが、ここでは詳しく説明しません。このサンプルではinit.propertiesを読み込んだ後、java.util.Propertiesクラスのlist()メソッドを使ってすべてのプロパティを出力しています。

Sample50013.java

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Properties;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class Sample50013 extends HttpServlet {

	public void doGet(HttpServletRequest request,
			HttpServletResponse response)
	throws IOException, ServletException {

		// プロパティファイルのパスを取得する
		ServletContext context = this.getServletContext();
		String path = context.getRealPath("/WEB-INF/init.properties");

		// プロパティファイルをロードする
		InputStream is = new FileInputStream(path);
		Properties properties = new Properties();
		properties.load(is);
		is.close();

		response.setContentType("text/html; charset=Windows-31J");
		PrintWriter out = response.getWriter();

		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");

		// プロパティの出力
		out.println("PATH:" + path + "<br />");
		properties.list(out);

		out.println("</body>");
		out.println("</html>");

	}
}

以下はこのサンプルのweb.xml定義です。

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>

	<servlet>
		<servlet-name>50013</servlet-name>
		<servlet-class>Sample50013</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>50013</servlet-name>
		<url-pattern>/50013</url-pattern>
	</servlet-mapping>

</web-app>