在Os上执行我的程序时,我特别需要解开在不同子目录中找到的文件。我通过调用免费软件命令行工具unrar来实现这一点,它工作得很好。然而,unrar总是解压当前工作目录中的文件,这意味着我必须为执行的进程指定一个工作目录,或者在我的.jar主文件夹中获取每个解压的文件。这很容易使用processBuilder.directory(目录)或runTime.getRuntime().exec(args,null,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对象将它们视为路径的实际部分。
Edit:让整个过程更清晰一点: 1.我有一个单独的方法,它将一个命令和一个目录提供给execute方法一个命令和一个目录给processbuilder,所有的目录都是通过前面的方法找到并存在的。除非目录中包含空格,否则这种方法是有效的。2.我需要设置工作目录,否则命令将在错误的位置执行。3.通过以下方式解析文件对象: java File(dir.tostring.replace(“","\ ");在所有空格前面放一个反斜杠是不起作用的,因为dir=new file对象随后会查找包含实际反斜杠的路径。不走运。4.使用rt.exec而不是processbuilder也无济于事。
任何最受欢迎的想法。
发布于 2010-12-03 16:22:15
这样如何:
dir.mkdirs();在启动流程之前。
这将创建缺失的目录。
编辑
这看起来很奇怪。
String[] cmd = { "/Users/chargedPeptide/rar/unrar", "e", "-o+","/Users/chargedPeptide/rar", "2/weather.rar"};如果这是一个shell,你可以这样写:
unrar e -o+ "/Users/chargedPeptide/rar 2/weather.rar"您实际上必须将.rar文件放在引号中,否则它将被解释为流程的2个参数。
您拆分'cmd‘的方式就是这样做的,将rar参数一分为二。尝试:
String[] cmd = { "/Users/chargedPeptide/rar/unrar", "e", "-o+","/Users/chargedPeptide/rar 2/weather.rar"};发布于 2010-12-03 16:26:31
不确定它是否可以工作,但您可以尝试将/放在路径的末尾。即,
File dir=new File("/Users/chargedPeptide/rar 2/");https://stackoverflow.com/questions/4343551
复制相似问题