Votre problème est que vous ne savez pas quel est le répertoire "courant". Si vous démarrez Tomcat sous Linux en tant que service, le répertoire actuel peut être n'importe quoi. Donc new File(".")
vous obtiendra une place aléatoire dans le système de fichiers.
Utilisation de la propriété système catalina.base
est bien meilleur car le script de démarrage de Tomcat catalina.sh
définira cette propriété. Cela fonctionnera donc tant que vous n'essayez pas d'exécuter votre application sur un autre serveur.
Un bon code ressemblerait à ceci :
File catalinaBase = new File( System.getProperty( "catalina.base" ) ).getAbsoluteFile();
File propertyFile = new File( catalinaBase, "webapps/strsproperties/strs.properties" );
InputStream inputStream = new FileInputStream( propertyFile );
Comme vous pouvez le voir, le code ne mélange pas les chaînes et les fichiers. Un fichier est un fichier et une chaîne n'est que du texte. Évitez d'utiliser du texte pour le code.
Ensuite, j'utilise getAbsoluteFile()
pour m'assurer d'obtenir un chemin utile dans les exceptions.
Assurez-vous également que votre code n'avale pas d'exceptions. Si vous aviez pu voir le message d'erreur dans votre code, vous auriez vu instantanément que le code essayait de chercher au mauvais endroit.
Enfin, cette approche est fragile. Votre application s'interrompt si le chemin change, lorsqu'un serveur Web différent est utilisé et dans de nombreux autres cas.
Envisagez d'étendre l'application Web strsproperties
pour accepter les requêtes HTTP. De cette façon, vous pouvez configurer votre application pour qu'elle se connecte à strsproperties
via une URL. Cela fonctionnerait pour n'importe quel serveur Web, vous pourriez même mettre les propriétés sur un autre hôte.
Si votre code s'exécute à l'intérieur d'un servlet, il peut être plus simple d'utiliser getServletContext().getRealPath("/strs.properties")
pour récupérer le chemin absolu du fichier.