4

私のアプリケーションには、データベース属性、log4j.xml パスなどを含む構成ファイル (ABC.xml) があります。log4j.xml パスは、ABC.xml では ( D:\log4j.xml) として、Linux では ( .\\..\\..\\log4j.xml\\) として指定されます。

Apache tomcat サーバーを使用しており、サーバー コンテキストに ABC.xml があります。

WindowsとLinuxの両方でlog4jのパスを同じ表現にする方法はありますが、サーバーの種類に応じて解釈されますか?

4

3 に答える 3

1

一般的なアプローチは、システムプロパティに関連するパスを使用することです。これにより、OS固有の形式(C:\...または/opt/)でルートフォルダを指定し、後で相対部分を添付することができます。

JavaはWindowsとUnixの相対パスを処理できるため、new File( "C:\\app", "conf/log4j.xml" )実際にはを開こうとすることに注意してくださいC:\app\conf\log4j.xml

あなたの場合、あなたはこのコードを使うことができます:

File confFolder = new File( System.getProperty( "confDir" ) );
File log4j = new File( confFolder, "log4j.xml" );

もう1つのオプションは、構成ファイルの変数名を置き換えることです。そうすればあなたは持つことができます

<logConfDir>${appRoot}/conf</logConfDir>
<log4j>${logConfDir}/log4j.xml</log4j>

Systemプロパティがある場合はlogConfDir、configオプションを上書きする必要があります。これにより、顧客は必要と思われることを何でもできるようになります。

于 2013-03-12T13:41:24.573 に答える
1

Java ファイル処理は/、Windows オペレーティング システムでもセパレーターとして処理できるため、Linux と Windows の両方で ABC.xml./../../log4j.xmlに書き込むことができます (パスは相対パスである必要があり、ドライブ文字を含めないでください)。

したがって、コードを記述するとき

File f = new File("./../../log4j.xml");

ウィンドウの引数"./../../log4j.xml"は、内部的に".\\..\\..\\log4j.xml"およびに変換されます。

f.getAbsolutePath();

Windows では、witch が出力する文字列が返さ"C:\\some\\dir\\.\\..\\..\\log4j.xml"C:\some\dir\.\..\..\log4j.xmlます。C:\some\dir.\..\..\log4j.xml

于 2013-03-12T08:55:40.840 に答える
1

サーブレットを使用していて、ファイルがプロジェクト内にある場合、サーブレット内で次のことができます。

InputStream is = getServletContext().getResourceAsStream("/log4j.xml");
于 2013-03-12T08:33:55.667 に答える