ActionでのgetRealPath()の方法

StrutsのActionからファイル入出力操作をしたいときに、ファイルパスをどうやって取得するか?というオハナシ.(別にStrutsに限った話じゃなくて,Servlet共通の話だけど)
Appで使うちょっとしたファイルとかは,WEB-INF/ 以下に置きたいけど,インストールする先の環境が不定TOMCATインストールDirが不定)なので,絶対パスで指定するわけにはいかない.
かといって,相対パスで書こうと,ActionでてきとーにFileをnewして,相対パスでカレント直下って指定してやると,%WINDOWS%/System32/になってしまう.

というわけで,ちゃんと仮想パス→絶対パスの変換をしてあげましょう.

request.getRealPath()ってのがあったけど,
http://www.jajakarta.org/tomcat/servletapi/servletapi-4.0/docs-ja/javax/servlet/ServletRequest.html#getRealPath(java.lang.String)
によれば,このメソッドは非推奨となっていて,代わりに ServletContext.getRealPath(java.lang.String) を使ってください とある
http://www.jajakarta.org/tomcat/servletapi/servletapi-4.0/docs-ja/javax/servlet/ServletContext.html#getRealPath(java.lang.String)

Servletクラスなら,this.getServletContext().getRealPath() なんてできるけど,Actionクラスで直接ServletContextを取得することはできないので以下のようになる,

String path = this.getServlet().getServletContext().getRealPath("/conf/conf.txt");
File logFile = new File(path);
BufferedReader br = new BufferedReader(new FileReader(questionSource));

(アプリケーションのルートディレクトリ)/conf/conf.txtを読み込む場合は上のような感じになる.