我正在尝试从java获取我的Project的当前目录。我使用以下代码行来获取路径详细信息。
类型1:
File directory = new File (".");
try {
System.out.println ("Current directory's canonical path: "
+ directory.getCanonicalPath());
System.out.println ("Current directory's absolute path: "
+ directory.getAbsolutePath());
}catch(Exception e) {
System.out.println("Exceptione is ="+e.getMessage());
}
类型2:
String currentDir = System.getProperty("user.dir");
System.out.println("Current dir using System:" +currentDir);
从主类执行上述代码时,我正在获取项目目录。当我从服务器端执行时,得到“当前dir使用System:D:\ Apache Tomcat 6.0.16 \ bin”。但我的项目位于D:\Apache Tomcat 6.0.16\wepapps\SampleStructs
。
请给我任何建议,并帮助我解决这个问题。
答案 0 :(得分:7)
首先,问题的主要原因是当前工作目录与可执行文件的位置之间的差异。您应该知道Linux中的当前工作目录不是可执行文件所在的目录,而是启动程序的当前目录。
举个例子,假设您有一个程序current
打印出当前目录,它位于/home/user/scripts/
。
如果你这样做:
cd /home/user/scripts
./current
会打印出来:/home/user/scripts/
但是,如果你这样做:
cd /home/user/
scripts/current
输出结果为:/home/user/
关于可能的解决方案,我发现其中一些有用的是:
ClassLoader.getResourceAsStream()
getClass().getProtectionDomain().getCodeSource().getLocation().getPath()
。请在此处详细了解此方法和一些可能的问题:How to get the path of a running JAR file? 答案 1 :(得分:3)
因为当你从主类执行时一切都很好,但是这个代码在服务器上运行,它查看当前目录,当前目录结构是Apache'bin',你从那里启动服务器(run.bat)。 / p>
答案 2 :(得分:2)
您可以使用此代码
String absolutePath = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
absolutePath = absolutePath.substring(0, absolutePath.lastIndexOf("/"));
这段代码以前对我有用! 它将返回windows或linux中文件夹的完整路径。
答案 3 :(得分:0)
我们在这里讨论不同的背景。 1.以独立模式运行应用程序。 2.在服务器端的容器中运行应用程序。 在#1中,应用程序从它调用的目录运行。
但#2情况下,应用程序是相对于容器运行的,因此您可以看到服务器目录的位置。这也屏蔽了应用程序代码。