我是一名高中生,正在从事一个项目,该项目将把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