【问题标题】:Path names, file names via Runtime.getRunTime.exec() in Java, Windows/LinuxJava、Windows/Linux 中通过 Runtime.getRunTime.exec() 的路径名、文件名
【发布时间】:2012-12-08 06:28:43
【问题描述】:

我正在用 Java 编写一个 Java Swing 应用程序,用作 ffmpeg 命令的前端。它从用户那里输入文件夹和文件名,并添加更多在 JTextField 中不断显示的参数。用户可以在将要调用的文本字段中编辑最终命令。

这适用于 Windows 和 Linux:

Process ffmpeg = Runtime.getRuntime().exec(command, null, new File(current_working_folder));

command 是一个字符串。它根据操作系统进行格式化,因此路径始终是完整的(绝对路径),并且斜杠适用于给定的操作系统。

在 Windows 和 Linux 中,可以通过将文件夹和文件名包含在“....”中来执行 ffmpeg 命令。在 Windows 中,这种格式最终通过 Runtime.getRunTime.exec() 起作用。

但是,在 Linux 中,这不适用于 Runtime.getRunTime.exec()。引号可能被误解为“....”。

对此有何建议?

【问题讨论】:

  • 你有什么异常吗?

标签: java linux path


【解决方案1】:

尝试使用以下方法将命令作为数组而不是字符串传递:Runtime.exec(String[] cmdarray, String[] envp, File dir)

例如,而不是:

Runtime.getRuntime().exec("ffmpeg -i video_origine.avi video_finale.mpg", null, new File(current_working_folder));

使用:

Runtime.getRuntime().exec(new String[]{"ffmpeg", "-i", "video_origine.avi", "video_finale.mpg"}, null, new File(current_working_folder));

【讨论】:

  • 我只想使用一个字符串,因为我试图在最一般的情况下以及在所有操作系统上完成该功能。
  • 这是一个测试。 ffmpeg -f image2 -r 16 -i "/home/neuron/IdeaProjects/Perceptron/animations/来自 HeLL 的新文件夹 666。文件夹/frame%d.tga" "/home/neuron/IdeaProjects/Perceptron/movies/jk 904。 0. 02.1lk .folder/my mkvmovie.mkv" 请注意我们如何在路径/文件名中包含空格并将它们放在引号中。这适用于 windows 和 linux 控制台,但不适用于使用 java Runtime.getRuntime().exec() 在 linux 中。我认为,如果路径/文件名与我尝试创建的一样复杂,则通常很难创建字符串数组。
  • [Stderr] [image2 @ 0xa2c99a0] 找不到路径为“/home/neuron/IdeaProjects/Perceptron/animations/New”且索引在 0-4 [Stderr] 范围内的文件/home/neuron/IdeaProjects/Perceptron/animations/New:没有这样的文件或目录
  • 这在 Linux 中也无法通过 java 前端 ffmpeg -f image2 -r 16 -i /home/neuron/IdeaProjects/Perceptron/animations/New Folder 666 from HeLL.\ folder/frame%d .tga /home/neuron/IdeaProjects/Perceptron/movies/\ jk 904.\ 0.\ 02.1lk .folder/mkv mov22.mkv
  • {"ffmpeg", "-f", "image2", "-r", "16", "-i", "/home/neuron/IdeaProjects/Perceptron/animations/New 文件夹666 来自 HeLL.folder/frame%d.tga", "/home/neuron/IdeaProjects/Perceptron/movies/jk 904. 0. 02.1lk .folder/mymkvmovie.mkv"}; [Stderr] /home/neuron/IdeaProjects/Perceptron/movies/ jk 904. 0. 02.1lk .folder/mymkvmovie.mkv:没有这样的文件或目录
猜你喜欢
  • 1970-01-01
  • 2018-12-18
  • 2016-08-08
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多