上下文:我的软件依赖于调用一个由于旧的限制而只能接受相对路径作为输入的库.我需要相对于已知目录的路径.图书馆可能会像
java.io.File fooBar = new java.io.File("foo/bar");
我需要它来给我/ nwd / foo / bar而不是/ cwd / foo / bar,其中/ cwd是运行Java的工作目录.
出于所有目的和目的,我无法修改此库的内部行为.手动覆盖实例化这些对象的方法将涉及基本上重写整个库.
一个诱人的解决方案是在调用该库之前只使用System.setProperty(“ user.dir”,“ / nwd”),但这实际上并没有达到我想要的效果.的确,如果我调用fooBar.getAbsolutePath(),则将获得所需的/ nwd / foo / bar,但是如果我检查fooBar.exists()或尝试打开文件以进行读取或写入,则似乎文件没有不存在,因为它实际上是在尝试打开/ cwd / foo / bar.实际上,如果将fooBar改为由
java.io.File fooBar = new java.io.File(new java.io.File("foo/bar").getAbsolutePath());
那实际上会起作用,因为然后File对象实际上包含绝对引用.
在这一点上,我感到非常沮丧,以至于我不在乎是否需要hacky解决方案.我只需要更改工作目录的效果.