gpt4 book ai didi

java - 使用 Runtime.getRuntime().exec() 重定向不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:29 27 4
gpt4 key购买 nike

我需要从程序中执行命令。命令行没问题,在终端里试了下,在程序里不行。

我从我的代码中添加一个副本:

  File dir = new File("videos"); 
String[] children = dir.list();
if (children == null) {
// Either dir does not exist or is not a directory
System.out.print("No existe el directorio\n");
} else {
for (int i=0; i<children.length; i++) {
// Get filename of file or directory
String filename = children[i];

//Recojo el momento exacto
System.out.print("\n" +filename);

Process p = Runtime.getRuntime().exec("exiftool -a -u -g1 -j videos/"+filename+">metadata/"+filename+".json");
}

程序必须获取文件夹中所有文件的名称(文件名)并提取这些视频的元数据,将它们写入“元数据”文件夹中的 .json 文件中。
问题出在哪里?

最佳答案

问题是,重定向字符 ( > ) 是基于 shell 的结构,不是可执行文件。因此,除非您通过类似 bash 的方式运行此命令(你不是),它将被解释为你的 exiftool 的文字字符参数调用。

如果你想让它工作,你有两个选择:

  1. 让 bash 去做 - 将整个命令行作为参数传递给 bash -c .这可能需要一些英勇的逃避,尽管在你的情况下它看起来没问题。
  2. 在 Java 中自己进行重定向。在没有重定向输出的情况下调用命令(即直到 > 符号的所有内容),然后从进程的输出流中读取并将所有内容写入适当的文件。

后一种方法一开始听起来工作量更大,但当您考虑到您无论如何都需要始终读取进程的输出(参见 javadocs,第二段)时,它实际上没什么额外的最重要的是。您只是将此输出发送到一个文件,而不是将其丢弃。

关于java - 使用 Runtime.getRuntime().exec() 重定向不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3130787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com