首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中包含空格的工作目录中执行外部可执行文件?

在Java中包含空格的工作目录中执行外部可执行文件?
EN

Stack Overflow用户
提问于 2010-12-03 16:04:38
回答 2查看 2.6K关注 0票数 1

在Os上执行我的程序时,我特别需要解开在不同子目录中找到的文件。我通过调用免费软件命令行工具unrar来实现这一点,它工作得很好。然而,unrar总是解压当前工作目录中的文件,这意味着我必须为执行的进程指定一个工作目录,或者在我的.jar主文件夹中获取每个解压的文件。这很容易使用processBuilder.directory(目录)或runTime.getRuntime().exec(args,null,dir)来完成,例如,其中目录是一个文件。这非常有效,但当工作目录包含空格时就不是这样了。举个简短的例子:

代码语言:javascript
运行
复制
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);设置目录退出,并显示以下消息:

代码语言:javascript
运行
复制
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也无济于事。

任何最受欢迎的想法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-03 16:22:15

这样如何:

代码语言:javascript
运行
复制
dir.mkdirs();

在启动流程之前。

这将创建缺失的目录。

编辑

这看起来很奇怪。

代码语言:javascript
运行
复制
String[] cmd = { "/Users/chargedPeptide/rar/unrar", "e", "-o+","/Users/chargedPeptide/rar", "2/weather.rar"};

如果这是一个shell,你可以这样写:

代码语言:javascript
运行
复制
unrar e -o+ "/Users/chargedPeptide/rar 2/weather.rar"

您实际上必须将.rar文件放在引号中,否则它将被解释为流程的2个参数。

您拆分'cmd‘的方式就是这样做的,将rar参数一分为二。尝试:

代码语言:javascript
运行
复制
String[] cmd = { "/Users/chargedPeptide/rar/unrar", "e", "-o+","/Users/chargedPeptide/rar 2/weather.rar"};
票数 1
EN

Stack Overflow用户

发布于 2010-12-03 16:26:31

不确定它是否可以工作,但您可以尝试将/放在路径的末尾。即,

代码语言:javascript
运行
复制
File dir=new File("/Users/chargedPeptide/rar 2/");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4343551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档