使用运行时Java在linux中执行命令不工作返回代码不是0

时间:2014-10-08 14:24:28

标签: java linux runtime

我有一个像

这样的命令
cp -R Folder1/* Folder2/

rm -r /images/*.gif

尝试通过Java运行示例程序

是行不通的
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);
return proc.waitFor();  

我做错了什么?

2 个答案:

答案 0 :(得分:0)

当您运行进程时,Java会创建三个输出,即退出代码,STDOUT和STDERR。运行外部流程的好程序将检查这三个。

您只是在等待进程终止,并返回退出代码。

查看正在发生的事情的简单方法是“继承”STDOUT / STDERR流using a ProcessBuilder

ProcessBuilder pbuilder = new ProcessBuilder("cp", "-R", "Folder1/*", "Folder2/");
pbuilder.inheritIO();
Process proc = pbuilder.start();
return proc.waitFor();

你会更好地了解出了什么问题。

另请注意,我为命令使用了单独的String参数。这有助于确保将参数传递给基础流程。

答案 1 :(得分:0)

尝试这样:

public static void mergePDFs(String directory, String targetFile) throws DocumentException, IOException {
    File dir = new File(directory);
    File[] filesToMerge = dir.listFiles(new FilenameFilter() {

        public boolean accept(File file, String fileName) {
            System.out.println(fileName);
            return fileName.endsWith(".pdf");
        }
    });
    Document document = new Document();
    FileOutputStream outputStream = new FileOutputStream("C:\\Users\\LAWAL\\Desktop\\pdfs"+targetFile);
    PdfCopy copy = new PdfSmartCopy(document, outputStream);
    document.open();

    for (File inFile : filesToMerge) {
        PdfReader reader = new PdfReader(inFile.getCanonicalPath());
        copy.addDocument(reader);
        document.newPage();
        reader.close();   
    }
    document.close();
}

在ProcessBuilder中添加以上列表,然后执行。