あなたの問題は、「現在の」ディレクトリが何であるかがわからないことです。 Linux で Tomcat をサービスとして起動する場合、現在のディレクトリは何でもかまいません。だから new File(".")
ファイル システム内のランダムな場所を取得します。
システム プロパティ catalina.base
の使用 Tomcat の起動スクリプト catalina.sh
のため、はるかに優れています。 このプロパティを設定します。したがって、別のサーバーでアプリを実行しようとしない限り、これは機能します。
適切なコードは次のようになります:
File catalinaBase = new File( System.getProperty( "catalina.base" ) ).getAbsoluteFile();
File propertyFile = new File( catalinaBase, "webapps/strsproperties/strs.properties" );
InputStream inputStream = new FileInputStream( propertyFile );
ご覧のとおり、コードには文字列とファイルが混在していません。ファイルはファイルであり、文字列は単なるテキストです。コードにテキストを使用しないでください。
次に、 getAbsoluteFile()
を使用しています 例外で有用なパスを取得できるようにします。
また、コードが例外を飲み込まないようにしてください。コードでエラー メッセージを確認できた場合、コードが間違った場所を検索しようとしたことがすぐにわかります。
最後に、このアプローチは脆弱です。パスが変更された場合、別の Web サーバーが使用された場合、およびその他の多くの場合、アプリが壊れます。
webapp strsproperties
の拡張を検討してください HTTP リクエストを受け入れる。そうすれば、strsproperties
に接続するようにアプリを構成できます URL経由。これはどの Web サーバーでも機能し、別のホストにプロパティを配置することもできます。
コードがサーブレット内で実行される場合は、 getServletContext().getRealPath("/strs.properties")
を使用する方が簡単かもしれません 絶対ファイル パスを取得します。