java中的Runtime.getRuntime()。exec()时文件路径和特殊字符错误

时间:2015-07-01 08:08:49

标签: java command-line apache-spark exec

我正在尝试从java代码启动Apache Spark作业。文件路径和“符号”中存在问题。代码

            String command = sparkPath
                + "bin/spark-submit --class ClassName \"" + curFilePath
                + "\" " + readFilePath + " " + saveFilePath;

        System.out.println("Next command: \n " + command);
        // run Unix command
        Process proc = Runtime.getRuntime().exec(command);

因此,我有错误:

Exception in thread "main" java.net.URISyntaxException: Illegal character in path at index 0: "/home/ubuntu/Desktop/teh2/first-example-1.0.jar"
at java.net.URI$Parser.fail(URI.java:2848)
at org.apache.spark.util.Utils$.resolveURI(Utils.scala:1343)
at org.apache.spark.deploy.SparkSubmitArguments.parse$1(SparkSubmitArguments.scala:338)

但是,如果我删除“围绕curFilePath或从System.out.println复制命令并在命令行中粘贴/执行它,它可以正常使用双引号。

1 个答案:

答案 0 :(得分:0)

请检查它被调用的目录。

您可以尝试以下步骤

  1. SPARK_HOME中添加SPARK_PATH$PATH,如果添加,则可以在没有绝对/相对路径的bin目录中执行脚本
  2. 建议不要
  3. Runtime.exec。使用ProcessBuilder执行命令,它将接受一个String数组/ List,在列表中添加命令和参数并使用它来执行。