我正在尝试从java获取我的项目的当前目录。 我正在使用下面的代码行来获取path的详细信息。
types1:
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()); }
types2:
String currentDir = System.getProperty("user.dir"); System.out.println("Current dir using System:" +currentDir);
从主类执行上述代码时,我正在获取项目目录。 当我从服务器端执行,得到“当前目录使用系统:D:\ Apache Tomcat 6.0.16 \ bin”。 但是我的项目位于D:\Apache Tomcat 6.0.16\wepapps\SampleStructs
。
请给我任何build议,并帮助我。
这是因为当你从主类执行一切都很好,但是这个代码运行在服务器上它会查看当前目录,目前的目录结构是从你已经启动服务器(run.bat)的Apache'bin'。
首先,你的问题的主要原因是当前工作目录和你的可执行文件的位置之间的差异。 您应该知道,Linux中的当前工作目录不是可执行文件所在的目录,而是当前启动程序的目录。
举一个例子,假设你有一个打印当前目录的程序,它位于/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()
。 看到更多关于这种方法和一些可能的问题在这里: 如何获得正在运行的JAR文件的路径? 你可以使用这个代码
String absolutePath = getClass().getProtectionDomain().getCodeSource().getLocation().getPath(); absolutePath = absolutePath.substring(0, absolutePath.lastIndexOf("/"));
这个代码是为我工作之前! 它会返回在Windows或Linux中的文件夹的完整路径。
我们在这里讨论的是不同的背景。 1.以独立模式运行应用程序。 2.在服务器端的容器中运行应用程序。 在#1中,应用程序从被调用的目录运行。
但#2的情况下,应用程序相对于容器运行,所以你看到的服务器目录的位置。 这也屏蔽了应用程序代码。