Il tuo problema è che non sai quale sia la directory "corrente". Se avvii Tomcat su Linux come servizio, la directory corrente potrebbe essere qualsiasi cosa. Quindi new File(".")
ti porterà in una posizione casuale nel file system.
Utilizzando la proprietà di sistema catalina.base
è molto meglio perché lo script iniziale di Tomcat catalina.sh
imposterà questa proprietà. Quindi funzionerà fintanto che non proverai a eseguire la tua app su un server diverso.
Un buon codice sarebbe simile a questo:
File catalinaBase = new File( System.getProperty( "catalina.base" ) ).getAbsoluteFile();
File propertyFile = new File( catalinaBase, "webapps/strsproperties/strs.properties" );
InputStream inputStream = new FileInputStream( propertyFile );
Come puoi vedere, il codice non mescola stringhe e file. Un file è un file e una stringa è solo testo. Evita di utilizzare il testo per il codice.
Successivamente, utilizzo getAbsoluteFile()
per assicurarmi di ottenere un percorso utile nelle eccezioni.
Assicurati inoltre che il tuo codice non ingoi eccezioni. Se avessi potuto vedere il messaggio di errore nel tuo codice, avresti visto immediatamente che il codice ha cercato di cercare nel posto sbagliato.
Infine, questo approccio è fragile. La tua app si interrompe se il percorso cambia, quando viene utilizzato un server web diverso e per molti altri casi.
Prendi in considerazione l'estensione della webapp strsproperties
per accettare le richieste HTTP. In questo modo, puoi configurare la tua app per connettersi a strsproperties
tramite un URL. Questo funzionerebbe per qualsiasi server web, potresti persino mettere le proprietà su un host diverso.
Se il tuo codice viene eseguito all'interno di un servlet, potrebbe essere più semplice utilizzare getServletContext().getRealPath("/strs.properties")
per recuperare il percorso assoluto del file.