如何将System.getProperty(“user.dir”)更改为项目工作区

时间:2011-06-13 02:47:40

标签: java

我尝试在我的代码中逐行读取.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");],以便指向我的项目工作区?
  3. 谢谢!

    沙龙


    关于你的回复:

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

    我找不到你要说的地方。它在Eclipse或Tomcat目录中吗?

    感谢

5 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:4)

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

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

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

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

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

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

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

答案 2 :(得分:3)

OK!我懂了!

是的,

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

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

即使我运行tomcat不是通过eclipse IDE,但是Dos cmd甚至部署到服务器,它仍然将工作目录应用为D:\ Eclipse。但无论如何都要改变工作目录。

答案 3 :(得分:1)

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

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

所以你根本不必弄乱当前的文件夹。

答案 4 :(得分:0)

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

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

如果你从一些主要方法运行相同的,那么在运行配置中添加vairable,因为这将在你的代码中保持神智。