■ はじめに
https://blogs.yahoo.co.jp/dk521123/37497699.htmlで、JARファイル内のリソースファイルのパスは 「jar:file:/C:/XXXX/SampleDemo-1.0.0.jar!/Sample.vm」のようになる。 しかし、直接ストリームとしてオープンすることは可能なので そのサンプルを書く
■ サンプル
JarOpenDemo.java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; public class JarOpenDemo { public static void main(String[] args) { try (InputStream inputStream = JarOpenDemo.class.getClass() .getResourceAsStream("/mail/templates/sample.vm");) { String fileText = toString(inputStream); System.out.println("File Content : " + fileText); // Using Velocity Velocity.init(); VelocityContext context = new VelocityContext(); context.put("name", "Mike"); try (StringWriter stringWriter = new StringWriter();) { Velocity.evaluate(context, stringWriter, "Demo", fileText); System.out.println("Result : " + stringWriter.toString()); } } catch (Exception ex) { ex.printStackTrace(); } } public static String toString(InputStream inputStream) throws IOException { if (inputStream == null) { return null; } try (BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));) { StringBuilder stringBuilder = new StringBuilder(); String line; while ((line = bufferedReader.readLine()) != null) { stringBuilder.append(line); } return stringBuilder.toString(); } } }
/mail/templates/sample.vm
Hello World, $name
出力結果
File Content : Hello World, $name Result : Hello World, Mike
参考文献
JARファイル内のリソースファイルを開くhttps://stackoverflow.com/questions/20389255/reading-a-resource-file-from-within-jar
InputStream型 ⇒ String型
https://web.plus-idea.net/2012/10/java-string-inputstream/
Velocity で文字列をテンプレートとして使う
http://java.akjava.com/library/jakarta-velocity/howtouse
http://d.hatena.ne.jp/cero-t/20110126/1296057986