2013-09-25 95 views
10

我在写一些单元测试。我通过直接调用类来运行测试(而不是调用另一个程序)。问题是这些类中的一些使用由相对路径定义的数据,因此它们要求程序在特定目录中启动。我怎样才能改变这在Java中?Java更改文件工作目录

例如,我的单元测试开始于C:/unittest,我需要的数据是C:/OtherProject。我不想修改其他项目的代码,如果可能的话,是有这样的事情在Java:

File.setWorkingDir("C:/OtherProject"); 

这样,当像

File file = new File("data/data.csv"); 

会读C:/OtherProject/data/data.csv而不是C:/unittest/data/data.csv

+0

如何在测试目录中获取用于测试目的的数据副本? – Fildor

+0

ASAIK,没有可用的东西。 –

+0

这就是为什么人们使用数据库共享相同的数据,管理相同的数据。 –

回答

11

更新我的答案,因为VolkerSeibt指出它不正确。接得好。

这可能通过System.setProperty。您可以通过改变"user.dir"系统属性改变当前的工作目录:

System.setProperty("user.dir", "/foo/bar"); 

作进一步说明,请参见http://www.javacodex.com/Files/Set-The-Current-Working-Directory

+0

我已经做了很多周转,这似乎确实如此。我已经解决了这个问题,只需要一个静态类'FileUtil'来存储工作目录(并有访问器),然后是一个函数'loadFile',它实际上只是将工作目录预先设置为传递的文件路径。 – Andy

+1

这是错的。请参阅http://www.javacodex.com/Files/Set-The-Current-Working-Directory。至少在Windows和Linux上工作。 –

+0

@VolkerSeibt:很好。我已经更新了我的答案。 – Bucket

0

我认为工作目录是由启动jvm的目录(执行java时使用的目录)决定的。