Váš problém je, že nevíte, co je to "aktuální" adresář. Pokud spustíte Tomcat v Linuxu jako službu, aktuální adresář může být jakýkoli. Takže new File(".")
vám získá náhodné místo v systému souborů.
Pomocí systémové vlastnosti catalina.base
je mnohem lepší, protože spouštěcí skript Tomcatu catalina.sh
nastaví tuto vlastnost. Bude to tedy fungovat, pokud se nepokusíte spustit aplikaci na jiném serveru.
Dobrý kód by vypadal takto:
File catalinaBase = new File( System.getProperty( "catalina.base" ) ).getAbsoluteFile();
File propertyFile = new File( catalinaBase, "webapps/strsproperties/strs.properties" );
InputStream inputStream = new FileInputStream( propertyFile );
Jak vidíte, kód nemíchá řetězce a soubory. Soubor je soubor a řetězec je pouze text. Nepoužívejte pro kód text.
Dále používám getAbsoluteFile()
abych se ujistil, že dostanu užitečnou cestu ve výjimkách.
Také se ujistěte, že váš kód nepolyká výjimky. Pokud byste ve svém kódu viděli chybovou zprávu, okamžitě byste viděli, že se kód pokusil hledat na nesprávném místě.
V neposlední řadě je tento přístup křehký. Vaše aplikace se přeruší, pokud se změní cesta, při použití jiného webového serveru a v mnoha dalších případech.
Zvažte rozšíření webové aplikace strsproperties
přijímat požadavky HTTP. Tímto způsobem můžete nakonfigurovat svou aplikaci tak, aby se připojovala k strsproperties
prostřednictvím adresy URL. To by fungovalo pro jakýkoli webový server, dokonce byste mohli umístit vlastnosti na jiného hostitele.
Pokud váš kód běží uvnitř servletu, může být jednodušší použít getServletContext().getRealPath("/strs.properties")
k načtení absolutní cesty k souboru.