4

在我的应用程序中,我有一个配置文件 (ABC.xml),其中我们有数据库属性、log4j.xml 路径和其他。log4j.xml 路径在 ABC.xml 中作为 ( D:\log4j.xml) 给出,对于 linux 作为 ( .\\..\\..\\log4j.xml\\)。

我们正在使用 apache tomcat 服务器,并且我们在服务器上下文中有 ABC.xml。

有什么方法可以让我对 windows 和 linux 的 log4j 路径有相同的表示,但它会根据服务器类型进行相应的解释?

4

3 回答 3

1

A common approach is to use paths relative to a system property. This allows you to specify the root folder in the OS specific format (C:\... or /opt/) and attach the relative part later.

Note that Java can handle Windows and Unix relative paths, so new File( "C:\\app", "conf/log4j.xml" ) will actually try to open C:\app\conf\log4j.xml.

In your case, you could use this code:

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

Another option is to replace variable names in config files. That way you can have

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

If there is a System property logConfDir, it should overwrite the config option. That will allow customers to do whatever they think necessary.

于 2013-03-12T13:41:24.573 回答
1

好吧,如果您使用的是 servlet 并且文件在项目中,那么在 servlet 中您可以:

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

java 文件处理也可以/在 windows 操作系统上作为分隔符处理,因此您可以在 ABC.xml./../../log4j.xml中为 linux 和 windows 编写(路径必须是相对的,并且不应包含驱动器号)。

因此,当您编写代码时

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

windows的参数"./../../log4j.xml"将在内部转换为".\\..\\..\\log4j.xml"

f.getAbsolutePath();

将在windows上返回字符串"C:\\some\\dir\\.\\..\\..\\log4j.xml"witch打印为witch的相对目录C:\some\dir\.\..\..\log4j.xml在哪里。C:\some\dir.\..\..\log4j.xml

于 2013-03-12T08:55:40.840 回答