1

我正在为youtube-dl的 Windows exe 版本创建一个基于 Java 的 GUI 。
README的OUTPUT TEMPLATE部分表示-o可用于在下载时设置保存位置和文件名。
当我通过命令行使用该程序时,我可以将下载位置设置为正常使用youtube-dl.exe -o "C:\Users\<user>\Videos\%(title)s.%(ext)s" <youtube-link>,并正常下载到指定的文件夹。
但是,当我通过 Java 调用进程时,使用ProcessBuilder如下:

output = "-o \"" + save_path + "\\%(title)s.%(ext)s\"";
Process process = new ProcessBuilder("lib\\youtube-dl.exe", output, url.getText()).start();

我不断收到以下输出:

-o "C:\Users\nightstalker\Videos\youtube-dl\%(title)s.%(ext)s"
Thread Start
[youtube] wnc77S-g0qQ: Downloading webpage
[youtube] wnc77S-g0qQ: Extracting video information
[youtube] wnc77S-g0qQ: Downloading js player en_US-vfljL8ofl
[youtube] wnc77S-g0qQ: Downloading DASH manifest
[download] Destination:  C#\Users\nightstalker\Videos\youtube-dl\Some Video.mp4

save_path看起来像

File save_path = new File("C:\\Users\\"+System.getProperty("user.name")+"\\Videos\\youtube-dl");

这基本上创建了一个名为C#\Users\nightstalker\Videos\youtube-dl并继续在那里下载的文件夹。有什么理由吗?

4

1 回答 1

1

我将回避格式问题,并希望提供一个仍然对您有用的答案。

ProcessBuilder允许您按如下方式设置工作目录:

Process p = null;
ProcessBuilder pb = new ProcessBuilder("do_foo.sh");
pb.directory("/home");
p = pb.start();

来源:https ://stackoverflow.com/a/8405745/154527

您可以将ProcessBuilder上的directory()设置为 **C:\Users\<user>\Videos**,而不是将整个路径放入传递给youtube-dl的-o选项中,如下所示:

output = "\"%(title)s.%(ext)s\"";
Process process = new ProcessBuilder("lib\\youtube-dl.exe", "-o", output, url.getText()).directory("save_path").start();
于 2015-06-29T21:46:28.107 回答