如何使用Java通过Mac OS终端运行命令



我是一名高中生,正在从事一个项目,该项目将把YouTube链接中的视频转换为MP3并下载。然而,下载和转换YouTube视频的方式是通过Mac OS终端使用YouTube dl。

这就是我放入终端的内容:

youtube-dl -f bestvideo+bestaudio "ytsearch:{https://www.youtube.com/watch?v=5X-Mrc2l1d0}"

这在终端中有效,但当我尝试使用时:

Runtime.getRuntime().exec("cd /Users/poppa/Desktop/IA Vids");

并且有一个错误说"No such file or directory"

我遇到的另一个问题是运行从Java输入到终端的代码。如果有帮助的话,我会使用IntelliJ IDEA。非常感谢。

目录路径中有一个空格。试着像这样加双引号:

Runtime.getRuntime().exec("cd "/Users/zeidakel/Desktop/IA Vids"");

还要注意,当(例如(使用new File("path")创建文件时,从JVM执行cd命令可能对当前用户目录没有影响

如果cd的意思是change directory(不是可执行文件的名称(,那么即使执行正确,它几乎肯定不会生效。exec()派生的进程将有一个工作目录,并且可以对其进行更改,但这种更改只会影响派生的进程。

此外,在exec()的自变量中有空格本身就是有问题的。exec()而不是shell,您将无法通过使用引号等shell机制来保护字符串在空格处不被拆分。相反,您需要自己将命令拆分为多个参数,知道拆分的位置,然后使用exec()的形式,将String[]作为输入。也就是说,您可以自己将参数拆分为一个字符串数组,而不是依靠exec()(错误地(来完成。

Runtime.exec()充满了困难,需要非常小心地处理。我在这里写了很多关于这个主题的文章:

http://kevinboone.me/exec.html

最新更新