У меня есть приложение J2EE, развернутое в виде файла EAR, которое, в свою очередь, содержит файл JAR для кода бизнес-уровня (включая некоторые EJB) и файл WAR для кода веб-уровня. Файл EAR развертывается в JBoss 3.2.5, который распаковывает файлы EAR и WAR, но не файл JAR (это не проблема, это просто FYI).
Один из файлов в JAR-файле представляет собой шаблон MS Word, абсолютный путь которого необходимо передать в некоторый собственный код MS Word (используя Jacob , FWIW).
Проблема заключается в том, что если я пытаюсь получить файл, подобный этому (из некоторого кода в файле JAR):
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 не является иерархическим». 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
Какой самый простой способ получить абсолютный путь к этому файлу?