Java规范化外部执行的文件路径

发布于 2024-10-18 20:59:12 字数 376 浏览 1 评论 0原文

我有这样的代码:

StringBuilder command = new StringBuilder("ffmpeg -ac 1 -i ");
command.append(videoFile.getPath());
command.append(" ");
command.append(audioFile.getPath());
Process proc = Runtime.getRuntime().exec(command.toString());

问题是当文件(videoFile | audioFile)的路径中有空格字符时,进程(ffmpeg)无法执行。 我的问题是如何在执行该过程之前修复 Linux 和 Windows 的路径?

谢谢。

I have this code:

StringBuilder command = new StringBuilder("ffmpeg -ac 1 -i ");
command.append(videoFile.getPath());
command.append(" ");
command.append(audioFile.getPath());
Process proc = Runtime.getRuntime().exec(command.toString());

The problem is when the file (videoFile | audioFile) have a space character in their path, the process (ffmpeg) fail to execute.
My question is how can I fix the path for both Linux and Windows before executing the process ?

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

离线来电— 2024-10-25 20:59:12

不要使用 exec(String),而是使用 exec(String[])(来自 运行时)。第二种形式允许您单独提供所有参数,这样 Java 不需要进一步解析它们,并且不会在空格上分割。

示例:

  Process proc = Runtime.getRuntime().exec(
    new String[]{"ffmpeg", "-ac", "1", "-i",videoFile.getPath()), audioFile.getPath()}
  );

如果您的参数可能包含空格,则应始终使用第二种形式,否则您的命令可能会中断。

Instead of using exec(String), use exec(String[]) (from Runtime). The second form lets you supply all arguments individually, that way Java does not need to parse them further, and will not split on spaces.

Example:

  Process proc = Runtime.getRuntime().exec(
    new String[]{"ffmpeg", "-ac", "1", "-i",videoFile.getPath()), audioFile.getPath()}
  );

You should always use the second form if your arguments may contain spaces, otherwise your command may break.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文