在 Os x 上执行我的程序期间,我特别需要解压缩在不同子目录中找到的文件。我通过调用免费软件命令行工具 unrar 来做到这一点,它工作得很好。但是,unrar 将始终解压缩当前工作目录中的文件,这意味着我必须为执行的进程指定一个工作目录或获取我的 .jar 主文件夹中的每个解压缩文件。这很容易使用 processBuilder.directory(dir) 或runTime.getRuntime().exec(args,null,dir)
例如 dir 是一个文件。这很好用,但当工作目录包含空格时就不行了。作为一个简短的例子:
File dir=new File("/Users/chargedPeptide/rar 2");
String[] cmd = { "/Users/chargedPeptide/rar/unrar", "e", "-o+","/Users/chargedPeptide/rar", "2/weather.rar"};
Process pr = Runtime.getRuntime().exec(cmd,null,dir);
int exitValue=pr.waitFor();
将不起作用,而使用:Process pr = Runtime.getRuntime().exec(cmd);
将成功启动命令,但将所有文件留在 jars 工作目录中。改用 processbuilder 并使用 processbuilder.directory(dir);
设置目录退出并显示以下消息:
Exception: Cannot run program "/Users/chargedPeptide/rar/unrar" (in directory "/Users/chargedPeptide/rar 2"): error=2, No such file or directory
帮助?我如何处理空间?我尝试在空格之前添加反斜杠以使它们在字面上没有帮助,因为 File 对象将它们视为路径的实际部分。
编辑:为了让整个事情更清楚一点: 1. 我有一个单独的方法,它为执行方法提供一个命令和一个目录到 processbuilder,所有目录都由前一个方法找到并存在。除非目录包含空格,否则此方法有效。2.我需要设置工作目录,否则命令会在错误的地方执行。3.通过以下方式解析文件对象: dir=new File(dir.tostring.replace(" ","\ "); 将反斜杠放在所有空格前面不起作用,因为 java File 对象然后查找包含的路径实际的反斜杠。没有运气。4.使用 rt.exec 而不是 processbuilder 也无济于事。
欢迎任何想法。