0

我有一种情况,我希望(需要)在执行给定的 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");


        }
4

2 回答 2

0

这是一个关于如何使用Runtime.exec When Runtime.exec() won't的好教程。

这个想法是您需要为创建的过程使用标准输入、输出和错误Runtime.exec,并且我提到的站点是完美的。

于 2013-09-09T09:35:22.670 回答
0

你需要:

  1. 从生成的进程中消耗 stdout/stderr。请注意,您必须在单独的线程中执行此操作,以避免在等待您读取时阻塞进程。有关更多详细信息,请参阅此答案
  2. 用于Process.waitFor()收集衍生进程的退出代码

不相关:查看Files.copy()以执行跨平台文件复制操作

于 2013-09-09T09:36:04.000 回答