3

アプリケーションからプロパティ ファイルのコンテキスト パスを読み取ろうとしていますが、

properties.load(this.getClass().getResourceAsStream(path));



import java.util.Properties;

public class test1 {

    public String getValues()
    {
        PropertiesFileReader fileReader = new PropertiesFileReader();

        Properties prop = fileReader.getProp("/messages/AttachFile.properties");

        String out = prop.getProperty("FILE_NAME");

        return out;
    }
}

これは、プロパティファイルが下にWEB-INF -> classes -> messages -> myfile あるときに機能しますが、このファイルを他のフォルダーに移動するWEB-INF -> messages -> myfileと、パスを取得できないようです...

編集:私はサーブレットを使用していません...

4

3 に答える 3

2

Class#getResourceAsStream()クラスパスからリソースをロードする際に、新しいパスがクラスパスの一部ではないために失敗した場合。これ/WEB-INF/classesは、サーブレット API 仕様で指定されているように、デフォルトでクラスパスの一部であるため、機能しました。クラスパスに保持するか、新しいパス/WEB-INF/resourcesをクラスパスに追加することをお勧めします。

Eclipse のような IDE を使用している場合は、それをプロジェクトのビルド パスにソース フォルダー/WEB-INF/classesとして追加することで実行できます (ビルド中にとにかく元に戻します)。または、Java ソース ルートにパッケージを作成し、resourcesそこにファイルを配置することもできます。クラスパスの一部にもなります。

于 2011-03-12T14:19:45.530 に答える
0

先頭に追加するだけです/WEB-INF/

"/WEB-INF/messages/myfile";
于 2011-03-12T13:23:34.363 に答える
0

サーブレットを使用していないと言うとき、それはどういう意味ですか? このコードはどのように実行されますか?
基本的に、サーブレットを使用する場合、クラスパスには WEB-INF/classes と WEB-INF/lib のみが存在します。したがって、クラスローダーを使用してリソースにアクセスすることはできません。ただし、ServletContext を使用してそれらにアクセスできます。したがって、コードがサーブレット/JSP で実行されると仮定すると、次のことができます。

getServletContext().getResourceAsStream("your resource starting from web-application root");
于 2011-03-12T18:23:20.017 に答える