J'ai une application J2EE déployée en tant que fichier EAR, qui à son tour contient un fichier JAR pour le code de couche de gestion (y compris certains EJB) et un fichier WAR pour le code de couche Web. Le fichier EAR est déployé sur JBoss 3.2.5, qui décompresse les fichiers EAR et WAR, mais pas le fichier JAR (ce n'est pas le problème, c'est juste FYI). L'un des fichiers dans le fichier JAR est un modèle MS Word dont le chemin absolu doit être passé à du code MS Word natif (en utilisant Jacob, FWIW).Obtention du chemin absolu d'un fichier dans un fichier JAR dans un fichier EAR?
Le problème est que si je tente d'obtenir le fichier comme celui-ci (à l'intérieur du code dans le fichier 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
... alors le constructeur java.io.File
lance l'URI IllegalArgumentException »n'est pas hiérarchique ". L'URL et URI ont tous deux la même sortie toString(), à savoir:
jar:file:/G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents/myapp.jar!/my/package/myTemplate.dot
Cette grande partie du chemin est valide sur le système de fichiers, mais le reste est pas (être interne au fichier JAR):
G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents
Quelle est la manière la plus simple d'obtenir le chemin absolu de ce fichier?
Lorsque j'ai trouvé ce problème, ma première idée a été "Ouais, peut-être que le seul moyen est d'écrire un fichier temporaire!". Et surprise, c'est le seul moyen! Comment peut-il être qu'il n'y a aucun moyen de gérer un chemin dans un pot? Si vous pouvez obtenir le flux, vous pouvez obtenir le fichier, dans un monde parfait. –