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