Su problema es que no sabe cuál es el directorio "actual". Si inicia Tomcat en Linux como un servicio, el directorio actual podría ser cualquier cosa. Así que new File(".")
obtendrá un lugar aleatorio en el sistema de archivos.
Usando la propiedad del sistema catalina.base
es mucho mejor porque el script de inicio de Tomcat catalina.sh
establecerá esta propiedad. Así que esto funcionará siempre y cuando no intentes ejecutar tu aplicación en un servidor diferente.
Un buen código se vería así:
File catalinaBase = new File( System.getProperty( "catalina.base" ) ).getAbsoluteFile();
File propertyFile = new File( catalinaBase, "webapps/strsproperties/strs.properties" );
InputStream inputStream = new FileInputStream( propertyFile );
Como puede ver, el código no mezcla cadenas y archivos. Un archivo es un archivo y una cadena es solo texto. Evite usar texto para el código.
A continuación, estoy usando getAbsoluteFile()
para asegurarme de obtener una ruta útil en las excepciones.
También asegúrese de que su código no acepte excepciones. Si hubiera podido ver el mensaje de error en su código, habría visto instantáneamente que el código intentó buscar en el lugar equivocado.
Por último, este enfoque es frágil. Su aplicación falla si cambia la ruta, cuando se usa un servidor web diferente y en muchos otros casos.
Considere extender la aplicación web strsproperties
para aceptar solicitudes HTTP. De esa forma, podría configurar su aplicación para conectarse a strsproperties
a través de una URL. Esto funcionaría para cualquier servidor web, incluso podría colocar las propiedades en un host diferente.
Si su código se ejecuta dentro de un servlet, puede ser más sencillo usar getServletContext().getRealPath("/strs.properties")
para recuperar la ruta absoluta del archivo.