ProcessBuilder pb = new ProcessBuilder("pwd");
pb.directory(new File("/server1/work/uz/rt/adapt/0/"));
Process s = pb.start();
我期望输出为 /server1/work/uz/rt/adapt/0/
,但实际上是:
/work/uz/rt/adapt/0/
/work/uz/rt/adapt/0/
和 /server1/work/uz/rt/adapt/0/
是等效的(安装在同一位置,/work/.. 是正确的路径,/server1/work/.. 是已安装的路径),但我需要在 /server1/work/uz/rt/adapt/0/
下工作,因为一些其他服务器只能通过该路径工作。
如何使 /server1/work/uz/rt/adapt/0/
成为当前路径?
换句话说
为什么要公共(public)ProcessBuilder目录(文件目录) 将目录转换为规范文件。如何使用绝对文件路径?
我也尝试过黑客解决方案'
pb.directory(new File("/asr1/work/oguz/rt/adaptMLLR2/0/"){
public File getCanonicalFile(){
return this.getAbsoluteFile();
}
public String getCanonicalPath() {
return this.getAbsolutePath();
}
});
效果不太好。
我通过在 bash 脚本中添加 cd/server1/.. 行解决了我的问题.. 并删除了 pd.directory(..) 行。但是这个问题(为什么我不能将 pd.directory(..) 与 AbsolutePath 一起使用)还没有得到解答......???
最佳答案
使用 shell 的 cd
实用程序似乎是一个合适的解决方案。另一种方法是将 PWD
环境变量设置为带有符号链接(symbolic link)的路径名,但这很丑陋,除非您让 ProcessBuilder
自动为您完成此操作。
请注意,如果 PWD
不是当前目录的绝对路径名,shell 会忽略它,而是向系统询问不带符号链接(symbolic link)的绝对路径名。
关于java - 正确设置工作路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3542341/