私はJ2EEアプリケーションをEARファイルとしてデプロイしています。これには、ビジネスレイヤーコード(いくつかのEJBを含む)用のJARファイルと、Webレイヤーコード用のWARファイルが含まれています。 EARファイルはJBoss 3.2.5にデプロイされ、EARファイルとWARファイルは展開されますが、JARファイルは展開されません(これは問題ではなく、FYIです)。EAR内のJAR内のファイルの絶対パスを取得していますか?
JARファイル内のファイルの1つは、絶対パスをネイティブMSワードコード(Jacob、FWIWを使用)に渡す必要があるMS Wordテンプレートです。
URL url = getClass().getResource("myTemplate.dot");
File file = new File(url.toURI()); // <= fails!
String absolutePath = file.getAbsolutePath();
// Pass the absolutePath to MS Word to be opened as a document
を...そしてjava.io.File
コンストラクタが例外:IllegalArgumentException「URIが階層されていないスロー:
問題は、私は(JARファイル内のいくつかのコード内から)このようなファイルを取得しようとするということです" URLとURIの両方、すなわち同じのtoString()出力、持っている:
jar:file:/G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents/myapp.jar!/my/package/myTemplate.dot
をパスのこの多くは、ファイルシステム上で有効ですが、残りの部分ではありません(JARファイルの内部である):
G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents
このファイルの絶対パスを取得する最も簡単な方法は何ですか?
この問題を発見したとき、私の最初のアイデアは「ええ、唯一の方法は一時ファイルを書くことです!そして驚き、それは唯一の方法です!どのようにして、瓶の中のパスを処理する方法がないのだろうか?あなたがストリームを得ることができれば、完璧な世界でFileを得ることができます。 –