我有一个像
这样的命令cp -R Folder1/* Folder2/
或
rm -r /images/*.gif
尝试通过Java运行示例程序
是行不通的Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);
return proc.waitFor();
我做错了什么?
答案 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中添加以上列表,然后执行。