2016-06-22 10 views
1

Tomcatサーバーに展開したときに、プロジェクトフォルダの1ステップ後ろのパスからファイルを読みたい。例えばのために :Javaのプロジェクトフォルダの1ステップ後のファイルを読む方法

Projectフォルダ:

apache-tomcat-7.0.63/webapps/Test/index.jsp 

は、今私がWebアプリケーションフォルダに

File inputFile = new File(getServletContext().getRealPath("test.xml")); 

どのように私はこれを実装することができますを使用して

apache-tomcat-7.0.63/webapps/test.xml 

あるファイルを読みたいです。

ありがとうございます。

+0

でファイルを読み込むことができるかどうかをチェックすることができますが、新規で、inputFile =ファイル '試してみてください – Jezor

+0

そのようなものはありません: java.io.FileNotFoundException:apache-tomcat-7.0.63/webapps/Test \ .. \ testファイル(getServletContext()。getRealPath( "../ test.xml")) .xml(システムは指定されたファイルを見つけることができません) – Vivek

+0

'File inputFile = new File(getServletContext()。getRealPath(" ")+" ../ test.xml ");' – Jezor

答えて

2

あなたはベースコンテキストディレクトリから親ディレクトリのパスを取得する必要があります。

File contextBasePath = new File(getServletContext().getRealPath("")); 

し、目的のファイル名を指定して、それを連結:

String fileName = "test.xml"; 
File inputFile = new File(contextBasePath.getParent() + '/' + fileName); 
-1
getServletContext().getRealPath("/") 

はのファイルシステムパスを提供します同じコンテナの別のバージョンであっても、異なるコンテナが終了スラッシュを返すことがあります。ので、あなたのファイルへのフェイルセーフのアクセスは、これらのラインを用いて達成することができる(それが存在しないasuming)

String path = getServletContext().getRealPath("/").replaceAll("[/\\\\]$", "")+ "/../test.xml"; 

Javaは

new File(path).exists() 
+0

多くのライブラリは先行するスラッシュに関して非常に厳格です。 "../test.xml"ではなく "../test.xml"であるはずですか? – cpburnz

+0

はい、私はそれを提出する前にテストしました(グラスフィッシュ4)。 ほとんどの場合、パス値には終了スラッシュが含まれていません。 –

+0

質問には、_leading_スラッシュを含めるべきかどうかです - '/../ test.xml'はUnix上では'/text.xml'、別名rootのtext.xmlファイルを意味します。 –

関連する問題