带重定向的java getRuntime().exec()

带重定向的java getRuntime().exec(),java,rdf,jena,runtime.exec,Java,Rdf,Jena,Runtime.exec,我试图在java中执行一个终端命令,但是我得到了错误的结果(即使命令正在执行)。当我将相同的命令粘贴到终端时,它会产生正确的输出。我猜问题是因为重定向字符(“”)而发生的,但我还没有找到解决方案。我正在使用eclipse和osx。 下面是命令,非常感谢 Process p = Runtime.getRuntime().exec("java -jar filePath/rdfslice_1.6.jar " + "-source filePath/myData.nt -patterns {?s1

我试图在java中执行一个终端命令,但是我得到了错误的结果(即使命令正在执行)。当我将相同的命令粘贴到终端时,它会产生正确的输出。我猜问题是因为重定向字符(“”)而发生的,但我还没有找到解决方案。我正在使用eclipse和osx。 下面是命令,非常感谢

Process p = Runtime.getRuntime().exec("java -jar filePath/rdfslice_1.6.jar "
 +
 "-source filePath/myData.nt -patterns {?s1 <http://www.europeana.eu/schemas/edm/isShownAt> ?o1.} " 
+
"-out filePath/output.out -order S");
processp=Runtime.getRuntime().exec(“java-jar文件路径/rdfslice_1.6.jar”
+
“-source filePath/myData.nt-patterns{?s1?o1.}”
+
“-out filePath/output.out-order S”);

Runtime.exec已经过时,不应该再用于任何用途。它的替代品是。使用时,您不必引用或转义任何内容:

ProcessBuilder builder = new ProcessBuilder(
    "java",
    "-jar",
    "filePath/rdfslice_1.6.jar",
    "-source",
    "filePath/myData.nt",
    "-patterns",
    "{?s1 <http://www.europeana.eu/schemas/edm/isShownAt> ?o1.}",
    "-out",
    "filePath/output.out",
    "-order",
    "S");

Process p = builder.inheritIO().start();
ProcessBuilder=新的ProcessBuilder(
“爪哇”,
“-jar”,
“filePath/rdfslice_1.6.jar”,
“-来源”,
“filePath/myData.nt”,
“-模式”,
“{s1?o1.}”,
“-退出”,
“filePath/output.out”,
“-命令”,
“S”);
进程p=builder.inheritIO().start();

Runtime.exec已经过时,不应该再用于任何用途。它的替代品是。使用时,您不必引用或转义任何内容:

ProcessBuilder builder = new ProcessBuilder(
    "java",
    "-jar",
    "filePath/rdfslice_1.6.jar",
    "-source",
    "filePath/myData.nt",
    "-patterns",
    "{?s1 <http://www.europeana.eu/schemas/edm/isShownAt> ?o1.}",
    "-out",
    "filePath/output.out",
    "-order",
    "S");

Process p = builder.inheritIO().start();
ProcessBuilder=新的ProcessBuilder(
“爪哇”,
“-jar”,
“filePath/rdfslice_1.6.jar”,
“-来源”,
“filePath/myData.nt”,
“-模式”,
“{s1?o1.}”,
“-退出”,
“filePath/output.out”,
“-命令”,
“S”);
进程p=builder.inheritIO().start();

Runtime.exec已经过时,不应该再用于任何用途。它的替代品是。使用时,您不必引用或转义任何内容:

ProcessBuilder builder = new ProcessBuilder(
    "java",
    "-jar",
    "filePath/rdfslice_1.6.jar",
    "-source",
    "filePath/myData.nt",
    "-patterns",
    "{?s1 <http://www.europeana.eu/schemas/edm/isShownAt> ?o1.}",
    "-out",
    "filePath/output.out",
    "-order",
    "S");

Process p = builder.inheritIO().start();
ProcessBuilder=新的ProcessBuilder(
“爪哇”,
“-jar”,
“filePath/rdfslice_1.6.jar”,
“-来源”,
“filePath/myData.nt”,
“-模式”,
“{s1?o1.}”,
“-退出”,
“filePath/output.out”,
“-命令”,
“S”);
进程p=builder.inheritIO().start();

Runtime.exec已经过时,不应该再用于任何用途。它的替代品是。使用时,您不必引用或转义任何内容:

ProcessBuilder builder = new ProcessBuilder(
    "java",
    "-jar",
    "filePath/rdfslice_1.6.jar",
    "-source",
    "filePath/myData.nt",
    "-patterns",
    "{?s1 <http://www.europeana.eu/schemas/edm/isShownAt> ?o1.}",
    "-out",
    "filePath/output.out",
    "-order",
    "S");

Process p = builder.inheritIO().start();
ProcessBuilder=新的ProcessBuilder(
“爪哇”,
“-jar”,
“filePath/rdfslice_1.6.jar”,
“-来源”,
“filePath/myData.nt”,
“-模式”,
“{s1?o1.}”,
“-退出”,
“filePath/output.out”,
“-命令”,
“S”);
进程p=builder.inheritIO().start();


这是一个猜测,但我通常希望每个项目之间都有空格,而这是通过连接这些字符串无法得到的。你们能试着在前两个字符串的末尾加一个空格吗?我建议使用library.hello Song,是的,这里通常有空格,我在粘贴时编辑了代码。只是一个注释,你们可能还应该使用ProcessBuilder来构建这个过程。这是一个猜测,但我通常希望每个项之间都有空格,这不是通过连接这些字符串得到的。你们能试着在前两个字符串的末尾加一个空格吗?我建议使用library.hello Song,是的,这里通常有空格,我在粘贴时编辑了代码。只是一个注释,你们可能还应该使用ProcessBuilder来构建这个过程。这是一个猜测,但我通常希望每个项之间都有空格,这不是通过连接这些字符串得到的。你们能试着在前两个字符串的末尾加一个空格吗?我建议使用library.hello Song,是的,这里通常有空格,我在粘贴时编辑了代码。只是一个注释,你们可能还应该使用ProcessBuilder来构建这个过程。这是一个猜测,但我通常希望每个项之间都有空格,这不是通过连接这些字符串得到的。你们能试着在前两个字符串的末尾加一个空格吗?我建议使用library.hello Song,是的,这里通常有空格,我在粘贴时编辑了代码。只是一个注释,你们可能还应该使用ProcessBuilder来构建这个过程。您好,当我第一次尝试执行此命令时,我已经尝试了process builder,但不知何故它不起作用。我试了你建议的那件事。但我会再尝试一次,效果很好。我以前没有使用Inheritario(),也许这就是原因。谢谢如果没有Inheritaio(),进程将无处打印其标准输出或标准错误,并可能在等待打印或使用该输出时最终阻塞。或者,您可以将stdout和stderr重定向到文件,或者您可以创建新线程以不断地从进程的输出流和错误流中读取,但是inheritIO()通常更容易。您好,我第一次尝试执行此命令时尝试了process builder,但不知怎的,它不起作用。我试了你建议的那件事。但我会再尝试一次,效果很好。我以前没有使用Inheritario(),也许这就是原因。谢谢如果没有Inheritaio(),进程将无处打印其标准输出或标准错误,并可能在等待打印或使用该输出时最终阻塞。或者,您可以将stdout和stderr重定向到文件,或者您可以创建新线程以不断地从进程的输出流和错误流中读取,但是inheritIO()通常更容易。您好,我第一次尝试执行此命令时尝试了process builder,但不知怎的,它不起作用。我试了你建议的那件事。但我会再尝试一次,效果很好。我以前没有使用Inheritario(),也许这就是原因。谢谢如果没有Inheritaio(),进程将无处打印其标准输出或标准错误,并可能在等待打印或使用该输出时最终阻塞。或者,您可以将stdout和stderr重定向到文件,或者您可以创建新线程以不断地从进程的输出流和错误流中读取,但是inheritIO()通常更容易