単純なJava= Webアプリケーションのクラスがあり、WEB-INF
フォルダーの下にある構成ファイルを読みたいと思っています。クラスパス(WEB-INF/classes
フォルダー)。WEB-INF/classes
フォルダーは.class
ファイル用であるため、設定ファイルはWEB-INF
フォルダーのみに保存します。
私のJavaクラスからどのようにアクセスできるかを誰かに教えてもらえますか?
ServletContext.getResourceAsStream() は、WARファイルのルートを基準にして、指定されたパスからファイルをロードします。何かのようなもの:
ServletContext ctx;
InputStream configStream = ctx.getResourceAsStream("/WEB-INF/config.properties");
ここでの主な問題は、これを行うにはサーブレットコンテキストにアクセスする必要があることです。サーブレットまたはフィルターにはありますが、アプリケーションのさらに後の非Webコンポーネントにはありません。いくつかのオプションがあります。
ServletContext
のgetRealPath()
メソッドを使用してサーブレットの絶対パスを取得し、取得したパスにWEB-INF
を追加できます。これは非常に基本的なことだと思います。他にもいくつかの答えがあるかもしれません。
「新しいFIleInputStream(Utility.class.getClassLoader()。getResource(keyFileName).getPath())」が私のために働いた。
ここで、「Utility」はコードがこの行を呼び出している私のクラス名です、「keyFileName」は私が開く必要があるファイルです
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")
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"));
乾杯!!