如何在 Java (IDE) 中找到当前项目目录的路径?

Posted

技术标签:

【中文标题】如何在 Java (IDE) 中找到当前项目目录的路径?【英文标题】:How to locate the Path of the current project directory in Java (IDE)? 【发布时间】:2012-10-12 06:57:37 【问题描述】:

我试图在 Java 中以编程方式定位当前正在运行/调试的项目的路径,我在 Google 中查找,发现是 System.getProperty("user.id"),我没有找到项目的路径。

我知道 C# 中的命令 Environment.currentDirectory 给出了当前运行/调试项目的路径,所以我确信 Java 中也一定有类似的方式。

所以我想问是否有人可以告诉我或给我一个代码来说明如何以编程方式定位当前正在运行/调试的项目的路径?

编辑: 我正在编写随 eclipse 启动加载的插件。 该插件在eclipse的工作台上添加了一个按钮,在插件的代码中 当我单击按钮时,我会搜索当前目录路径。

我的目的是,例如当我调试一个项目然后单击按钮时,会弹出一个窗口显示调试项目的路径,谢谢

【问题讨论】:

如果您不知道如何获取当前工作目录,您不应该编写 Eclipse 插件。当调试器透视图已经打开正确的源文件并定位在正确的行上时,我真的认为“打开项目文件夹”按钮没有用。再说一次 - 这是你的时间和精力。你可能只想花更多的时间学习 eclipse,而不是用一个有点没用的插件来减慢它的速度,而不是在脚上开枪:) 我想我明白了为什么这些示例不起作用,因为它打印了插件目录而不是正在调试的项目。我想我已经找到了其他方式,感谢大家的帮助 【参考方案1】:

两种方式

System.getProperty("user.dir");

或者这个

File currentDirFile = new File(".");
String helper = currentDirFile.getAbsolutePath();
String currentDir = helper.substring(0, helper.length() - currentDirFile.getCanonicalPath().length());//this line may need a try-catch block

这个想法是用“.”获取当前文件夹,然后获取它的绝对位置并从中删除文件名,所以从类似

/home/shark/eclipse/workspace/project/src/com/package/name/bin/Class.class

当你删除 Class.class 你会得到

/home/shark/eclipse/workspace/project/src/com/package/name/bin/

这有点像你想要的。

【讨论】:

如果我想要 src 路径而不是 bin? 答案的第二点不是问题的答案,第一点是。赞成这个答案:***.com/a/22011009/1763602【参考方案2】:

System.getProperty("user.dir") 呢?它会为您提供启动程序的工作目录。

请参阅 Java 教程中的 System Properties,了解 Java 系统属性的概述。

【讨论】:

我已经试过了,它没有给出当前目录路径,但它给出了包含eclipse项目的目录的路径。 “当前目录路径”是什么意思?使用此代码,您将获得程序启动的目录 - 是的,Eclipse 通常从您的项目存储在磁盘上的目录启动您的程序。 我在上面有编辑信息,我希望它能解释一切。 如果你想要调试开始的目录,使用上面的。如果您需要一些东西来查找项目路径,您可以假设它与开始调试的目录相同 - 或使用 Eclipse 插件 API 来查找。不幸的是,我不熟悉任何 Eclipse 插件 API,所以我无法帮助您。 当我将该命令放入我的插件并尝试调试项目时,上面的命令没有帮助,然后单击我的插件的按钮,无论如何谢谢。【参考方案3】:
File currDir = new File(".");
String path = currDir.getAbsolutePath();
System.out.println(path);

这将在最后打印.。要删除,只需将字符串截断一个字符,例如:

File currDir = new File(".");
String path = currDir.getAbsolutePath();
path = path.substring(0, path.length()-1);
System.out.println(path);

【讨论】:

它会在路径的末尾打印一个. @mthmulders:我更愿意分享这个概念。添加了substring() 以从末尾截断. 我试过了。我有关于上述主题的编辑信息,希望它能更好地解释一切,谢谢。 尝试“getCanonicalPath ()”,它将解析相对路径【参考方案4】:

你不能。

Java-Projects 没有一个路径! Java-Projects 有多个路径,即使一个类可以在一个“项目”中的不同类路径中具有多个位置。

因此,如果您的 JRE/lib 中有一个calculator.jar,而CD 上有一个具有相同类的calculator.jar:如果您执行CD 中的类的calculator.jar,java-vm 将获取来自 JRE/lib 的类!

这个问题经常出现在喜欢加载项目内部部署的资源的程序员身上。在这种情况下,

System.getResource("/likebutton.png") 

拿来举例。

【讨论】:

系统类型的getResource(String)方法未定义 从类路径获取路径与从 jvm/system 获取路径不同【参考方案5】:

使用user.dir 键使用 java 获取项目位置。

代码:

System.out.println("Present Project Directory : "+ System.getProperty("user.dir"));

输出:

Present Project Directory :C:\workspace\MyEclipse 10\examples\mysqlMavenDomain

要显示所有系统属性,只需使用System.getProperties();

使用System.getProperty("java.version"); 中的Key 值获取输出。

代码:

Properties properties = System.getProperties();
Enumeration<Object> enumeration = properties.keys();
for (int i = 0; i < properties.size(); i++) 
    Object obj = enumeration.nextElement();
    System.out.println("Key: "+obj+"\tOutPut= "+System.getProperty(obj.toString()));

输出:

Key: java.runtime.name  OutPut= Java(TM) SE Runtime Environment
Key: sun.boot.library.path  OutPut= C:\Program Files\Java\jdk1.7.0_45\jre\bin
Key: java.vm.version    OutPut= 24.45-b08
Key: java.vm.vendor OutPut= Oracle Corporation
Key: java.vendor.url    OutPut= http://java.oracle.com/
Key: path.separator OutPut= ;
Key: java.vm.name   OutPut= Java HotSpot(TM) Client VM
Key: file.encoding.pkg  OutPut= sun.io
Key: user.country   OutPut= US
Key: user.script    OutPut= 
Key: sun.java.launcher  OutPut= SUN_STANDARD
Key: sun.os.patch.level OutPut= Service Pack 3
Key: java.vm.specification.name OutPut= Java Virtual Machine Specification
Key: user.dir   OutPut= C:\workspace\MyEclipse 10\examples\MySqlMavenDomain
Key: java.runtime.version   OutPut= 1.7.0_45-b18
Key: java.awt.graphicsenv   OutPut= sun.awt.Win32GraphicsEnvironment
Key: java.endorsed.dirs OutPut= C:\Program Files\Java\jdk1.7.0_45\jre\lib\endorsed
Key: os.arch    OutPut= x86
Key: java.io.tmpdir OutPut= C:\DOCUME~1\UDAYP~2.PBS\LOCALS~1\Temp\
Key: line.separator OutPut= 

Key: java.vm.specification.vendor   OutPut= Oracle Corporation
Key: user.variant   OutPut= 
Key: os.name    OutPut= Windows XP
Key: sun.jnu.encoding   OutPut= Cp1252
Key: java.library.path  OutPut= C:\Program Files\Java\jdk1.7.0_45\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/MyEclipse/Common/binary/com.sun.java.jdk.win32.x86_1.6.0.013/jre/bin/client;C:/Program Files/MyEclipse/Common/binary/com.sun.java.jdk.win32.x86_1.6.0.013/jre/bin;C:/Program Files/MyEclipse/Common/binary/com.sun.java.jdk.win32.x86_1.6.0.013/jre/lib/i386;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\system32\WindowsPowerShell\v1.0;D:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;D:\Program Files\Microsoft SQL Server\100\Tools\Binn\;D:\Program Files\Microsoft SQL Server\100\DTS\Binn\;.
Key: java.specification.name    OutPut= Java Platform API Specification
Key: java.class.version OutPut= 51.0
Key: sun.management.compiler    OutPut= HotSpot Client Compiler
Key: os.version OutPut= 5.1
Key: user.home  OutPut= C:\Documents and Settings\uday.p.PBSYSTEMS
Key: user.timezone  OutPut= 
Key: java.awt.printerjob    OutPut= sun.awt.windows.WPrinterJob
Key: file.encoding  OutPut= UTF-8
Key: java.specification.version OutPut= 1.7
Key: java.class.path    OutPut= C:\workspace\MyEclipse 10\examples\MySqlMavenDomain\target\test-classes;C:\workspace\MyEclipse 10\examples\MySqlMavenDomain\target\classes;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\jstl\jstl\1.2\jstl-1.2.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\javax\servlet\javax.servlet-api\3.1.0\javax.servlet-api-3.1.0.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\mysql\mysql-connector-java\5.1.28\mysql-connector-java-5.1.28.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\javax\mail\mail\1.4.7\mail-1.4.7.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\junit\junit\4.11\junit-4.11.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\hibernate\hibernate-core\4.3.0.Final\hibernate-core-4.3.0.Final.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\jboss\logging\jboss-logging\3.1.3.GA\jboss-logging-3.1.3.GA.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\jboss\logging\jboss-logging-annotations\1.2.0.Beta1\jboss-logging-annotations-1.2.0.Beta1.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.0.0.Final\jboss-transaction-api_1.2_spec-1.0.0.Final.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\dom4j\dom4j\1.6.1\dom4j-1.6.1.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\xml-apis\xml-apis\1.0.b2\xml-apis-1.0.b2.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\hibernate\common\hibernate-commons-annotations\4.0.4.Final\hibernate-commons-annotations-4.0.4.Final.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\hibernate\javax\persistence\hibernate-jpa-2.1-api\1.0.0.Final\hibernate-jpa-2.1-api-1.0.0.Final.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\javassist\javassist\3.18.1-GA\javassist-3.18.1-GA.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\jboss\jandex\1.1.0.Final\jandex-1.1.0.Final.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\hibernate\hibernate-entitymanager\4.3.0.Final\hibernate-entitymanager-4.3.0.Final.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\commons-dbcp\commons-dbcp\1.4\commons-dbcp-1.4.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\commons-fileupload\commons-fileupload\1.3\commons-fileupload-1.3.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\commons-io\commons-io\2.4\commons-io-2.4.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\commons-net\commons-net\3.3\commons-net-3.3.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\commons-codec\commons-codec\1.9\commons-codec-1.9.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\commons-pool\commons-pool\1.6\commons-pool-1.6.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\commons-logging\commons-logging\1.1.3\commons-logging-1.1.3.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\commons-beanutils\commons-beanutils\1.9.0\commons-beanutils-1.9.0.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\apache\commons\commons-lang3\3.1\commons-lang3-3.1.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\springframework\spring-orm\3.2.6.RELEASE\spring-orm-3.2.6.RELEASE.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\aopalliance\aopalliance\1.0\aopalliance-1.0.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\springframework\spring-jdbc\3.2.6.RELEASE\spring-jdbc-3.2.6.RELEASE.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\springframework\spring-tx\3.2.6.RELEASE\spring-tx-3.2.6.RELEASE.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\springframework\spring-web\3.2.6.RELEASE\spring-web-3.2.6.RELEASE.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\springframework\spring-aop\3.2.6.RELEASE\spring-aop-3.2.6.RELEASE.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\springframework\spring-webmvc\3.2.6.RELEASE\spring-webmvc-3.2.6.RELEASE.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\springframework\spring-aspects\3.2.6.RELEASE\spring-aspects-3.2.6.RELEASE.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\aspectj\aspectjweaver\1.7.2\aspectjweaver-1.7.2.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\springframework\spring-beans\3.2.6.RELEASE\spring-beans-3.2.6.RELEASE.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\springframework\spring-context\3.2.6.RELEASE\spring-context-3.2.6.RELEASE.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\springframework\spring-context-support\3.2.6.RELEASE\spring-context-support-3.2.6.RELEASE.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\springframework\spring-core\3.2.6.RELEASE\spring-core-3.2.6.RELEASE.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\springframework\spring-expression\3.2.6.RELEASE\spring-expression-3.2.6.RELEASE.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\springframework\spring-instrument\3.2.6.RELEASE\spring-instrument-3.2.6.RELEASE.jar;C:\Documents and Settings\uday.p.PBSYSTEMS\.m2\repository\org\springframework\spring-instrument-tomcat\3.2.6.RELEASE\spring-instrument-tomcat-3.2.6.RELEASE.jar
Key: user.name  OutPut= uday.p
Key: java.vm.specification.version  OutPut= 1.7
Key: sun.java.command   OutPut= com.uk.mysqlmaven.domain.test.UserLoginDetails
Key: java.home  OutPut= C:\Program Files\Java\jdk1.7.0_45\jre
Key: sun.arch.data.model    OutPut= 32
Key: user.language  OutPut= en
Key: java.specification.vendor  OutPut= Oracle Corporation
Key: awt.toolkit    OutPut= sun.awt.windows.WToolkit
Key: java.vm.info   OutPut= mixed mode, sharing
Key: java.version   OutPut= 1.7.0_45
Key: java.ext.dirs  OutPut= C:\Program Files\Java\jdk1.7.0_45\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
Key: sun.boot.class.path    OutPut= C:\Program Files\Java\jdk1.7.0_45\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\rt.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_45\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_45\jre\classes
Key: java.vendor    OutPut= Oracle Corporation
Key: file.separator OutPut= \
Key: java.vendor.url.bug    OutPut= http://bugreport.sun.com/bugreport/
Key: sun.io.unicode.encoding    OutPut= UnicodeLittle
Key: sun.cpu.endian OutPut= little
Key: sun.desktop    OutPut= windows
Key: sun.cpu.isalist    OutPut= pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86

更多详情请咨询Class System

【讨论】:

我在 tomcat 服务器上运行我的项目。因此,当我使用 System.getProperty("user.dir") 时,它为我提供了 Tomcat 服务器的路径。有没有办法获取项目文件夹的路径? @DiliniPeiris 你可能会在这个***.com/questions/6326228/…得到答案【参考方案6】:

可以使用System.getProperty("user.dir")获取当前项目路径

在那个方法中你写Key name来获取你不同的路径,如果你不知道key,你可以找到System.getProperties()的所有属性使用这个方法是返回所有带有key的属性。您可以从中手动找到键名。

然后写System.getProperty("KEY NAME")

并获取您的要求路径。

【讨论】:

【参考方案7】:

这是一段代码sn-p,用于在java中检索当前正在运行的web应用项目的路径。

public String getPath() throws UnsupportedEncodingException 

    String path = this.getClass().getClassLoader().getResource("").getPath();
    String fullPath = URLDecoder.decode(path, "UTF-8");
    String pathArr[] = fullPath.split("/WEB-INF/classes/");
    System.out.println(fullPath);
    System.out.println(pathArr[0]);
    fullPath = pathArr[0];

    return fullPath;


来源:https://dzone.com/articles/get-current-web-application

【讨论】:

【参考方案8】:

这是新的做法:

Path root = FileSystems.getDefault().getPath("").toAbsolutePath();
Path filePath = Paths.get(root.toString(),"src", "main", "resources", fileName);

甚至更好:

Path root = Paths.get(".").normalize().toAbsolutePath();

但我会更进一步:

public Path getUsersProjectRootDirectory() 
    String envRootDir = System.getProperty("user.dir");
    Path rootDIr = Paths.get(".").normalize().toAbsolutePath();
    if ( rootDir.startsWith(envRootDir) ) 
        return rootDir;
     else 
        throw new RuntimeException("Root dir not found in user directory.");
    

【讨论】:

【参考方案9】:

我刚刚用过这个:

System.out.println(System.getenv().get("PWD"));

使用 OpenJDK 11

【讨论】:

以上是关于如何在 Java (IDE) 中找到当前项目目录的路径?的主要内容,如果未能解决你的问题,请参考以下文章

从命令行查找目录中的文件

如何在 Android Studio IDE 中找到我项目中所有未使用的方法?

如何在 Bamboo 中找到当前工作目录?

用编辑器而不是ide写的java程序如何引入第三方jar包?

Java中如何导入自己写的包

2通过HBase API进行开发