2017-05-18 6 views
0

私たちのアプリケーションでは、登録時に電子メールを送信しています。我々は上記/usr/local/email.htmlclasspathの下に保管されているファイルを参照する方法は?

StringWriter writer = new StringWriter(); 
IOUtils.copy(new FileInputStream(new File("/usr/local/email.html")),writer); 
message.setContent(writer.toString(), "text/html"); 
Transport.send(message); 

の下に保存された電子メールテンプレートを持っている。このため
が正常に動作しています。私たちは、このパス(/usr/local/email.html)をハードコーディングする必要はありません

は、私がどのように私はそれを読むことができ、クラスパスの下でそれを維持した場合、クラスパス

の下で維持したいですか?それは中にいた場合、あなたははgetClass()を使用している場合は、上記のコードでは

StringWriter writer = new StringWriter(); 
ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
InputStream is = loader.getResourceAsStream("email.html"); 
IOUtils.copy(is,writer); 
message.setContent(writer.toString(), "text/html"); 
Transport.send(message); 

が、私は

IOUtils.copy(is,writer); 
+0

クラスパスのルートレベルにありますか? – vikingsteve

+1

ドキュメントを参照することができます:http://stackoverflow.com/documentation/java/372​​0/the-classpath/14224/load-a-resource-from-the-classpath#t=201705181137403731917およびhttp://stackoverflow.com/documentation/java/2433/resources-on-classpath/26286/find-and-reading-resources-a-classloader#t = 201705181137022009462 – GPI

答えて

0

でjava.lang.NullPointerExceptionがを取得しています。getResourceAsStream相対パスで、リソースが発見されましたクラスと同じパッケージ。

なぜ、あなたのリソースがクラスパス上の固定された、既知の場所であるあなたが

this.getClass().getClassLoader().getResourceAsStream("email.html"); 
0

を絶対名を使用することができますしたがって、Class#getResourceAsStream methodを使用することをお勧めします。 Classオブジェクトで呼び出すと、クラスのClassLoaderが自動的に使用され、クラスのパッケージ内のリソースが検索されます。例えば

、あなたがcom.example.myapp.Emailerというクラスを持っているとあなたが書く場合:

InputStream is = Emailer.class.getResourceAsStream("email.html"); 

それはEmailerクラスをロードするために使用されるのと同じクラスローダを経由してcom/example/myapp/email.htmlを探します。コンパイルされたEmailer.classファイルと同じ場所に、email.htmlをJARに入れます。

結果はスレッドするスレッドから変えることができ、それが潜在的にあなたのリソースを保持しているJARファイルにアクセスすることはできませんクラスローダことができたので、私は具体的には、このためのThread.currentThread().getContextClassLoader()を使用してないをお勧めします。実際にアプリケーションのクラスをロードするクラスローダーを常に使用していることを確認し、アプリケーションのクラスの1つであるClassオブジェクトのgetResourceAsStreamを呼び出すことで実現します。

+0

申し訳ありませんが、これは静的コンテキストでは使用できません – Kiran

0

を使用いけない代わりに、あなたが「/some/package/email.html」のような

関連する問題