0

私の Java EE Web アプリケーションでは、getResource() を使用して検索できる場所にプロパティ ファイルを置き、そのファイルを更新する場所が必要です。

lib ディレクトリに配置しても、tomcat では機能しないようです。提案?

アプリケーションは、GXT が国際化された文字列を保持するプロパティ ファイルを持つ必要があることです。これらの文字列をデータベース テーブルからロードする必要があります。そのため、起動時にプロパティ ファイルを作成する必要があります。libディレクトリのjarファイルに入る空のファイルを作成しています。次に、そのファイルを見つけて、新しい回答を書き込みます。すべて桟橋では機能しますが、Tomcat では機能しません。

ありがとう。

4

2 に答える 2

3

ローカル ディスクのファイル システム パスを表していない可能性があるため、クラスパスの場所に確実に書き込めるとは限りません。(絶対) ディスク ファイル システムの場所にのみ書き込むことができます。

ClassLoader#getResource()クラスパスからのロードとFileOutputStreamローカル ディスク ファイル システムへの書き込みの両方に使用できるように、既知の固定ディスク ファイル システムの場所を用意し、それをクラスパスにも追加することをお勧めします。

Tomcat の場合、 のshared.loaderプロパティにより、固定ディスク ファイル システムの場所をクラスパスに追加できます/conf/catalina.properties。例えば

shared.loader = /var/webapp/conf

固定ディスク ファイル システムの場所を表すプロパティをプロパティ ファイル自体に追加すると便利な場合もあります。

my.location = /var/webapp/conf

こうすれば、次のように読むことができます。

Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("foo.properties");

そして名前を付けて保存

properties.store(new FileOutputStream(new File(properties.getProperty("my.location"), "foo.properties")));

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

于 2012-11-09T17:12:26.373 に答える
0
    //read properties    
    Properties prop = new Properties();
    ClassLoader loader = Thread.currentThread().getContextClassLoader();            
    InputStream stream = loader.getResourceAsStream("sample.properties");
    prop.load(stream);      
    //now save back, take as URL 
    java.net.URL f = loader.getResource("sample.properties");   
    File file = new File(f.getPath());
    OutputStream outstream = new FileOutputStream(file);
    prop.store(outstream, "");
    outstream.close();

ただし、 store() 後にファイルを「ユーザーが読み取り可能」に保つなどのさまざまな機能があるため、http://commons.apache.org/configuration/howto_properties.htmlの使用をお勧めします

于 2012-11-19T16:16:38.217 に答える