web-dev-qa-db-ja.com

JavaクラスのWEB-INFフォルダーにあるファイルにアクセスする方法

単純なJava= Webアプリケーションのクラスがあり、WEB-INFフォルダーの下にある構成ファイルを読みたいと思っています。クラスパス(WEB-INF/classesフォルダー)。WEB-INF/classesフォルダーは.classファイル用であるため、設定ファイルはWEB-INFフォルダーのみに保存します。

私のJavaクラスからどのようにアクセスできるかを誰かに教えてもらえますか?

18
Newbie

ServletContext.getResourceAsStream() は、WARファイルのルートを基準にして、指定されたパスからファイルをロードします。何かのようなもの:

ServletContext ctx;
InputStream configStream = ctx.getResourceAsStream("/WEB-INF/config.properties");

ここでの主な問題は、これを行うにはサーブレットコンテキストにアクセスする必要があることです。サーブレットまたはフィルターにはありますが、アプリケーションのさらに後の非Webコンポーネントにはありません。いくつかのオプションがあります。

  • アプリケーションスコープの変数、インジェクション、またはその他の方法で、サーブレットコンテキストをWebレイヤーからサービスレイヤーで利用できるようにする
  • リソース読み込みコードをWebレイヤーに配置し、サービスレイヤーに公開します
  • Webレイヤーに構成を読み込み、それをサービスレイヤーに渡します
18
Tom Anderson

ServletContextgetRealPath()メソッドを使用してサーブレットの絶対パスを取得し、取得したパスにWEB-INFを追加できます。これは非常に基本的なことだと思います。他にもいくつかの答えがあるかもしれません。

2
Abubakkar

「新しいFIleInputStream(Utility.class.getClassLoader()。getResource(keyFileName).getPath())」が私のために働いた。

ここで、「Utility」はコードがこの行を呼び出している私のクラス名です、「keyFileName」は私が開く必要があるファイルです

1
sahan maldeniya

hey you all care for context related file loading like application context , web.xml ,config and property file

JavaファイルをWEB-INFですが、サブフォルダーのような別の構造に保存されていますreportFileファイルまたはサブフォルダーを再びreport01--

fullpath is = /WEB-INF/reportFile/report01/report.xml、私はこのxmlファイルをロードして読み取るために多くの可能性を試しました...上記のどれも私にはうまくいきませんでしたが、これが将来の使用のためのトリックです...

In Action or inservice class you know interface implementation classいいえimportsそれも良い部分です。

ファイルオブジェクトを宣言する

File myClass = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getFile());
System.out.println("Finding calss path first then remove classes from the path "    + myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFIle/report01/reports.xml")

2.上記からclassesを削除してパスをロードし、特定のパスを追加します

File f = new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml")

その後

xmlパーサーを使用してそれを解析することも、何かを行うこともできます

document = docBuilder.parse(new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml"));

乾杯!!

0
danielad