我想用来从我的网络应用程序外部读取属性文件。
我在 Windows 环境中的 tomcat 中部署了一个 war 文件,并且可以使用以下代码从 Web 应用程序外部读取属性文件。
//(Method 1.)
String filePath =
new java.io.File( ".").getCanonicalPath()+"/webapps/strsproperties/strs.properties";
// or
//(Method 2.)
String filePath = new File(System.getProperty("catalina.base"))+ "/webapps/strsproperties/strs.properties";
InputStream inputStream = null;
inputStream = new FileInputStream(filePath);
properties.load(inputStream);
String application = properties.getProperty("applications");
在上述两种情况下,我都可以在 Windows 中读取 filePath。
问题是我无法使用第一种方法(相对路径)过程读取 Linux 中的 filePath。
有没有办法从Linux环境中使用tomcat中的相对路径读取文件?
您的问题是您不知道“当前”目录是什么。如果您在 Linux 上将 Tomcat 作为服务启动,则当前目录可以是任何目录。所以new File(".")
将为您提供文件系统中的随机位置。
使用系统属性catalina.base
好多了,因为 Tomcat 的启动脚本catalina.sh
将设置此属性。因此,只要您不尝试在不同的服务器上运行您的应用程序,这就会起作用。
好的代码应该是这样的:
File catalinaBase = new File( System.getProperty( "catalina.base" ) ).getAbsoluteFile();
File propertyFile = new File( catalinaBase, "webapps/strsproperties/strs.properties" );
InputStream inputStream = new FileInputStream( propertyFile );
如您所见,代码不会混合字符串和文件。文件就是文件,字符串只是文本。避免使用文本作为代码。
接下来,我正在使用getAbsoluteFile()
确保我在异常情况下获得有用的路径。
还要确保您的代码不会吞掉异常。如果您能够在代码中看到错误消息,您就会立即发现代码试图在错误的位置查找。
最后,这种方法很脆弱。如果路径发生变化、使用不同的 Web 服务器以及许多其他情况,您的应用程序就会崩溃。
考虑扩展网络应用程序strsproperties
接受 HTTP 请求。这样,您就可以将应用程序配置为连接到strsproperties
通过 URL。这适用于任何 Web 服务器,您甚至可以将属性放在不同的主机上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)