当前位置: 首页 > 面试题库 >

Java VM如何确定user.dir系统属性的值?

云宜人
2023-03-14
问题内容

我正在运行一个具有以下目录结构的简单Java程序:

MyProject (A project in my Eclipse IDE)
 '-- src
      '-- Hello.java

在Hello.java中,我正在打印“ user.dir”系统属性的值。

System.out.println(System.getProperty("user.dir"));

我班的已编译文件将存储在MyProject\bin文件夹中。

当我从Eclipse运行此类时(右键单击源文件,然后单击Run As-> Java Application),它将打印路径到“
MyProject”文件夹,即D:\Projects\Workspace\MyProject在控制台窗口中。

然后,我使用命令窗口运行相同的程序。这是我在窗口上键入的内容:

D:\Projects\Workspace\MyProject\bin>java Hello

控制台上的输出是: D:\Projects\Workspace\MyProject\bin

bin 已添加到user.dir的先前值。

此外,为进一步检查,我这次从命令窗口的另一个文件夹中执行了Java命令:

D:\Projects\Workspace\MyProject>java -classpath D:\Projects\Workspace\MyProject\bin Hello

这次在命令窗口上输出的是: D:\Projects\Workspace\MyProject

当我在命令窗口上更改文件夹时,以及从Eclipse运行程序时,此值都会更改,user.dir的值是项目文件夹。因此,我想了解,得出“
user.dir”值的基础是什么?JVM如何确定user.dir的值是什么?


问题答案:

根据java.lang.System规范user.dir定义,该属性返回当前工作目录(即,启动JVM时的当前目录):

user.dir 用户的当前工作目录

在您的示例中,我认为没有矛盾。这里唯一不清楚的是属性的名称。我不明白他们为什么选择在其中放置“用户”。

同样,如果您从完全不同的路径执行相同的Java程序,则将获得另一条路径作为结果。自己尝试一下:

 c:
 cd c:\
 java -cp D:\Projects\Workspace\MyProject\bin Hello

Eclipse在运行程序之前要做的事情类似于:

 d:
 cd d:\projects\workspace\myproject
 java -cp d:\projects\workspace\myproject\bin Hello


 类似资料:
  • 我试图在服务器上的web应用程序中读取一个本地文件。在JBoss部署之外测试时,文件路径是正确的。然而,当我将它部署到JBoss时,文件路径改变了JBoss的< code>bin目录。当< code>user.dir系统属性被部署为war时,它会发生变化。 我如何在不使用绝对文件路径的情况下防止这种情况? 我想避免绝对文件路径,因为项目需要在具有不同目录结构的多台机器上复制。

  • 问题内容: 我读过的几乎每篇文章都告诉我,Java中没有 chdir 。这个问题的公认答案是您不能用Java做到这一点。 但是,这是我尝试过的一些方法: 这是我正在使用的测试课程: 请解释为什么这样做。我可以从现在开始使用它,并期望它在所有平台上都能以相同的方式工作吗? 问题答案: 仅仅因为给出期望的答案并不意味着它正在做您想要的事情。 例如,尝试: 那到底在哪里?在我的Windows机器上,即使

  • 问题内容: 我在这里跟随有关JAAS身份验证的教程,当它显示如何运行示例代码时,说应该使用Java启动器的标准选项- Djava.security.auth.login.config ==启动已编译的类。 sample_jaas.config。这样,将设置系统属性: 我是用这种方式完成的,但是现在我也想在NetBeans中运行代码。由于NetBeans使用Ant,因此我认为指定这些选项可能有所不同

  • 问题内容: 在詹金斯中是否有任何“适当”的方法来更改系统属性?更改它们的最简单/最快的方法是什么?例如,我需要关闭无用的(在我的情况下)ping线程。 问题答案: 如果您确实想要快速简单的方法来更改系统属性,则可以使用脚本控制台 但这不会在重新启动后幸存下来。要使其永久,请将设置添加到java args。对于我(CentOS,Jenkins 2.7.1)而言,这大约是一半(对于其他发行版,我认为是

  • 问题内容: 是否可以向Java系统属性添加新值。如果有的话,如何在Java系统属性中引入具有相应值的新键。 问题答案: 无论是或使用国旗当您启动JVM

  • 问题内容: 我们正在使用类似于系统规则的方法来处理JUnit 4测试中的(系统)属性。这样做的主要原因是每次测试后都要清理环境,以便其他测试不会无意间依赖于可能的副作用。 由于JUnit 5已发布,所以我想知道是否存在“ JUnit 5方法”吗? 问题答案: 有JUnit 5 Pioneer,一个“ JUnit 5扩展包”。它带有和。从文档: 的和注释可用于清除,分别为测试执行系统设置属性的值。这