我有一种情况,我希望(需要)在执行给定的java程序时通过电子邮件发送文件。复制命令在Windows和Linux上都可以正常执行,但是,当在java上执行执行时,mutt不能正常工作。命令字符串生成完美,(我目前手动键入打印到控制台的字符串以手动发送电子邮件),但Runtime.getRuntime.exec()没有正确执行它。
if (OS.indexOf("win") >= 0)
{
// windows
cmd = "cmd /C copy "+workbookFileName+" "+latestWorkbookFileName;
System.out.println("executing command windows: "+cmd);
Runtime.getRuntime().exec(cmd);
}
else
{
// others
cmd = "cp "+workbookFileName+" "+latestWorkbookFileName;
System.out.println("executing Linux: "+cmd);
Runtime.getRuntime().exec(cmd);
cmd = "echo \"This is the message body\" | mutt -a \""+workbookFileName+"\" -s \"message subject\" -- sqlinjection@domain.com";
System.out.println("executing Linux: "+cmd);
Runtime.getRuntime().exec(cmd);
System.out.println("bye");
}
答案 0 :(得分:0)
这是一个很好的教程,介绍如何使用Runtime.exec
When Runtime.exec() won't。
我们的想法是,您需要为Runtime.exec
创建的流程使用标准输入,输出和错误,并且我提到的网站是完美的。
答案 1 :(得分:0)
你需要:
Process.waitFor()
收集衍生过程的退出代码不相关:查看Files.copy()以执行跨平台文件复制操作