如何在我的机器中获取服务器位置的绝对路径?
假设我使用的是 glassfish 服务器,那么我需要获取 glassfish docroot 位置的绝对路径,如下所示:
C:\glassfish3\glassfish\domains\domain1\docroot
在运行时,我需要使用 java io 包在该位置创建文件,例如:
C:\glassfish3\glassfish\domains\domain1\docroot\myfile.txt
如果您使用 GlassFish 启动 GlassFish,即使用,asadmin start-domain|start-instance
那么我们提供以下铁定保证:
JVM 的当前工作目录绝对肯定是域或服务器的配置目录。在默认情况下,这将是:
c:/glassfish3/glassfish/domains/domain1/config
如果你想写一些东西到(默认的)docroot,你可以这样做:
File f = new File("../docroot/yourfile");
即使您直接使用 java 启动服务器(例如java -jar glassfish.jar
),也可以保证在每种情况下始终有效的另一个选项是使用 System Property 的值,如下所示:
File f = new File(System.getProperty("com.sun.aas.instanceRoot") + "/docroot/yourfile");
我有一个类似的问题,最终使用
path = getClass().getProtectionDomain().getCodeSource().getLocation()
因为我需要静态函数的路径。这指向 WEB-INF/classes 目录。有了这个,你可以指向类似的东西path.subString(0,path.indexOf("WEB-INF"))
。
我遇到的一个问题:从 Eclipse 运行测试时,它指向项目的“构建”目录。
您可以尝试以下操作:
System.getProperty("catalina.base");
您可以通过在调试模式下查看以下变量来找到其他属性。
Properties properties = System.getProperties();
我不知道这是否是最好的方法,但它对我有用:)
String path = new File("").getAbsolutePath() + File.separator + "docroot";
这是一个非常糟糕的主意。如果您在 WAR 或 EAR 文件中运行,则 docroot 将不在可写文件系统上。假设是这种情况可能会导致以后头痛。
使用不同的方法(例如 servlet 初始化参数)来指定可写文件系统位置。
为此,您无需走完整的道路,因为
当您创建文件时,默认情况下它将在ROOT
您的服务器上创建
这是C:\glassfish3\glassfish\
在这里。
希望这会帮助你。