【问题标题】:How to change System.getProperty("user.dir") to project workspace如何将 System.getProperty("user.dir") 更改为项目工作区
【发布时间】:2011-09-13 15:36:11
【问题描述】:

我尝试在我的代码中逐行读取一个 .txt 文件,我将它放在 /src/ 目录下,当我使用测试用例或静态 void main 运行它时,路径输出是正确的。但是,当我使用 Tomcat 服务器运行应用程序时,应用程序根路径指向我下载 Eclipse 的位置 - D:\eclipse\...,而正确的路径应该是 D:\workspace\myproject\src\。然后,当然,它永远找不到该文件。

下面是我的代码:

String workDir = System.getProperty("user.dir");
String file = "numFile.txt";
File myFile = new File(workDir + file);
String userPath = myFile.getPath();

所以,我的问题是:

  1. (这可能很愚蠢)我们通常应该将文本文件放在哪里?
  2. 如何更改 [System.getProperty("user.dir");],使其指向我的项目工作区?

谢谢!

莎朗


关于您的回复:

添加以下参数-Duser.home='Your Path' 确保在系统变量的开头添加-D。当您在使用 tomcat 服务器时打开启动配置时,您可以将这个变量放在参数选项卡下提供的 VM 参数框中。

我找不到你说的那个地方。是在 Eclipse 还是 Tomcat 目录下?

谢谢

【问题讨论】:

  • 感谢您的回复。 1.我试过this.getClass().getClassLoader().getResourceAsStream("filename.txt"); => 这将返回 null。猜它只是找不到文件。 2. 正如@Eng.Fouad 的回答:这只是我的错字的修正,是的,我需要额外的 "/" File myFile = new File(workDir + "/" + file);但是,它仍然无法正常工作,因为我仍然遇到使用 Tomcat 运行时“workDir”会指向 D:\eclipse 的问题。为什么 tomcat 服务器会认为我的工作空间在 D:\eclipse 下?它一定是在某个地方设置的。帮助!我只是找不到答案。谷歌好几天。谢谢!

标签: java


【解决方案1】:

试试File myFile = new File(workDir, file);

【讨论】:

    【解决方案2】:

    好的!我明白了!

    是的,

    File myFile = new File(workDir + "/" + file);
    

    是要走的路。 我在 Eclipse IDE 中编辑了 tomcat 参数。 (运行 -> 运行配置... -> Apache Tomcat -> [单击] Tomcat vX 服务器 -> 在右侧屏幕上,单击“参数” -> 工作目录部分 -> 我更改为其他并指定我的实际工作目录。 )

    奇怪的是,即使我不是通过 Eclipse IDE 运行 tomcat,而是通过 Dos cmd 甚至部署到服务器,它仍然将工作目录应用为 D:\Eclipse。但是更改工作目录仍然有效。

    【讨论】:

    【解决方案3】:

    简短的回答是您不能在 Java 中更改正在运行的应用程序的当前工作目录;见Changing the current working directory in Java?

    设置user.dir 属性将不起作用,因为这不会影响操作系统在解析应用程序路径名时使用的实际当前目录。

    在命令行上设置-Duser.dir 也不起作用。相反,您必须:

    • 如果您使用脚本启动,在运行应用程序之前cd 到相关目录,
    • 如果您使用ProcessBuilder 启动,请使用directory(File) 方法设置工作目录,或者
    • 如果您使用的是 Eclipse 启动器,请在启动配置中设置“工作目录”。

    最后,你想要做的是(IMO)一个坏主意:

    • 有些人在编写 Tomcat 和 webapp 配置文件时假设 Tomcat 的当前目录是默认位置;例如$CATALINA_HOME/bin。 (这是错误的……但你的 hack 会破坏它。)
    • 当您的应用程序投入生产时,您不会希望回到某个开发沙箱。

    更好的方法是按照@Eng.Fouad 的回答做一些事情。

    【讨论】:

      【解决方案4】:

      要从类路径的根目录读取文件,请使用(eclipse 自动将任何非 java 文件从 src 复制到类):

      this.getClass().getClassLoader().getResourceAsStream("filename.txt");
      

      因此您根本不必弄乱当前文件夹。

      【讨论】:

        【解决方案5】:

        尽量不要改变系统属性,而是在系统属性中多加一个参数。

        例如。添加以下参数-Duser.home='Your Path' 确保在系统变量的开头添加-D。当您在使用 tomcat 服务器时打开启动配置时,您可以将此变量放入参数选项卡下提供的 VM 参数框中。

        如果您从某个主要方法运行相同的方法,则在运行配置中添加变量,因为这将保持您代码的完整性。

        【讨论】:

        • 1) 'user.home' 是错误的属性。 2)无论如何它都行不通;看我的回答。
        • @stephen :为什么错误的属性?我可以创建自己的系统变量,当我不需要使用现有的系统属性时,我可以创建自己的。
        • 啊。我明白你在说什么。 (如果正确标点,您的答案会更容易阅读!!!)。无论如何,您已经选择了一个 JVM 已经使用的属性来表示不同的含义;请参阅 System.getProperties() 的 javadoc。此外,您仍然必须对 webapp 进行编码以尊重该属性的值,因为仅设置该属性将没有任何效果。
        猜你喜欢
        • 1970-01-01
        • 2018-11-06
        • 1970-01-01
        • 1970-01-01
        • 2014-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-30
        相关资源
        最近更新 更多