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

我尝试在我的代码中逐行读取.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目录中吗?

谢谢

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

简而言之,您无法在Java中更改正在运行的应用程序的当前工作目录; 请参阅在Java中更改当前工作目录?

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

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

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

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

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

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

好! 我知道了!

是,

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

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

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

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

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

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

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

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

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