无法从java代码执行终端命令

时间:2014-10-24 15:50:26

标签: java command-line

我想在java程序中执行终端命令,例如cp。我正在尝试的代码是:

    public String executeCommand(){
Process p;
    String[] str = {"/bin/bash", "-c", "cp", "/Users/Desktop/abc.csv",  "/Users/Desktop/folder1/"};
            try {

                p = Runtime.getRuntime().exec(str);
            //p.waitFor();
            p.waitFor();
            BufferedReader reader =
                    new BufferedReader(new InputStreamReader(p.getInputStream()));

            String line = "";
            while ((line = reader.readLine())!= null) {
                output.append(line + "\n");
            }


            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println(output.toString());
            return "Success";
    }

代码执行时没有错误但我没有看到文件在目的地复制。我也尝试使用上面的命令只有一个String,而不是有一个数组,但仍然没有成功。如果我删除/bin/bash,则会收到错误cannot find cp: no such file or directory

我在这里做错了什么以及如何解决?

注意:我认为该命令根本不执行,就像我上面的复制示例一样,即使我给出了无效的文件位置,它也不会抛出任何错误并像以前一样执行没有实际执行命令。

更新:我可以使用/bin/cp后跟源和目标来执行cp命令。但是,如果我尝试执行像hadoop fs -put这样的命令,那么它就不起作用了。我正在尝试执行/usr/bin/hadoop fs -put。我收到错误could not find or load main class fs,  如何执行hadoop fs命令

1 个答案:

答案 0 :(得分:3)

cannot find cp: no such file or directory. - 表示未找到cp。尝试指定完整路径,例如/bin/cp

bash命令需要-c的单个参数,但是你传递了三个参数。尝试将其传递到同一部分,即{"/bin/bash", "-c", "cp /Users/Desktop/abc.csv /Users/Desktop/folder1/"}

或者,尝试一些其他更简洁的解决方案,例如Standard concise way to copy a file in Java?