6

からを作成し、で同じjarを使用したいとjar思いました。私はプロパティファイルをロードしようとしています。たとえば、keepedからsample.propertiesをロードしようとしています。このファイルには、jarのクラスで読み取られる必要があります。アクセスするには、jarのクラスで次のコードを使用しています。Java projectJSP Servlet ProjectJSP Servlet ProjectWEB/properties/sample.propertiesjar

Properties prop=new Properties();
prop.load(/WEB-INF/properties/sample.properties);

しかし、私が得るたびにfileNotFound exception
解決策を教えてください。

これが構造です

WEB-INF
      |
       lib
          |
           myproject.jar
                       |
                        myclass (This class needs to read sample.properties)
      |
       properties
                 |sample.properties
4

5 に答える 5

21

/WEB-INFフォルダーはクラスパスの一部ではありません。したがって、ここでの思慮のない提案である答えClassLoader#getResourceAsStream()決して機能しません。実際にクラスパスの一部であるプロパティファイルが配置されている場合にのみ機能します/WEB-INF/classes(EclipseのようなIDEでは、Javaソースフォルダーのルートに配置するだけで十分です)。

プロパティ ファイルが実際に保存したい場所にある場合は、ServletContext#getResourceAsStream()代わりに Web コンテンツ リソースとして取得する必要があります。

の中にいると仮定すると、次のようにHttpServletなります。

properties.load(getServletContext().getResourceAsStream("/WEB-INF/properties/sample.properties"));

(これgetServletContext()はサーブレット スーパークラスから継承されているため、自分で実装する必要はありません。したがって、コードはそのままです)

ただし、クラス自体がまったくない場合はHttpServlet、プロパティ ファイルをクラスパスに移動する必要があります。

以下も参照してください。

于 2012-09-21T02:13:48.520 に答える
6

srcフォルダーの下に sample.properties を配置してみてください。

Properties prop = new Properties();
prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("myprop.properties"));
于 2012-09-20T06:22:00.667 に答える
2

プロパティ ファイルを の下に移動しますWEB-INF/classes。次に、次のようにロードします。

prop.load(getClass().getResourceAsStream("sample.properties"));

以下のサブディレクトリに配置することもできclassesます。この場合、それにgetResourceAsStream()応じて呼び出しを変更します。

マルチクラスローダーシステムでより安全にするために、Thread.getContextClassLoader().getResourceAsStream()代わりに使用できます。

プロパティ ファイルがclasseswar ファイルのフォルダーに到達するようにするにresourcesは、プロジェクトのフォルダーの下 (maven を使用している場合) に配置するか、srcmaven のようなディレクトリ構造を使用していない場合はフォルダーのすぐ下に配置する必要があります。

于 2012-09-20T06:27:11.013 に答える
1

これを試して、

 InputStream inStream = Thread.currentThread().getContextClassLoader()
                     .getResourceAsStream("/WEB-INF/properties/sample.properties");

次に、それを Properties オブジェクトにロード (InputStream) します。

Properties props = new Properties();
props.load(inStream);
于 2012-09-20T06:23:38.910 に答える
0

jsp/servletからプロパティを読み込もうとすると機能しない場合があります。jarファイルとともにプロパティとパッケージを読み取るユーティリティクラスを記述します。プロパティファイルをユーティリティと同じパッケージにコピーします。

 Class Utility{
    Properties properties=null;
    public void load() throws IOException{
        properties.load(getClass().getResourceAsStream("sample.properties"));
    }
    public Object get(String key) throws IOException{
        if (properties==null){
            load();
        }
        return properties.get(key); 
    }
  }

次に、サーブレットのこのユーティリティクラスを使用して、プロパティ値を読み取ります。より良い練習のためにクラスをシングルトンとして定義できるかもしれません

乾杯Satheesh

于 2012-09-21T06:50:37.863 に答える