运行时exec与xml / jdom

时间:2013-06-06 15:27:29

标签: java runtime exec jdom

我编写了一个导出一些数据的java应用程序。您可以选择excel或xml输出。一切都完成后,我希望创建的文件自动打开。

对于Excel的东西我使用JExcelAPI并创建XML我使用JDOM。

我有一个方法openFile()在应用程序退出之前被调用:

private void openFile(File file) {

    try {
        String[] cmds = { "cmd", "/c", file.getAbsolutePath() };
        for (String s : cmds) {
            System.out.println(s);
        }

        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec(cmds);
        int exitVal = proc.waitFor();
        System.out.println("Process exitValue: " + exitVal);

    } catch (Throwable t) {
        t.printStackTrace();
    }
}

当我使用Excel选项时,使用openFile()的以下输出打开文件就好了:

cmd
/c
D:\test.xls
Process exitValue: 0

使用XML输出我不会工作,虽然我可以手动打开文件。

cmd
/c
D:\test.xml
Process exitValue: 1

所以我猜这个问题在JDOM的某个地方,因为两个应用程序是相同的,除了我执行excel或xml写入的一种方法。但直到现在我还没有成功。有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

如果test.xml文件有效,那么执行XML文件时出现问题几乎不是JDOM的错误.....问题更可能是因为你没有正确的Windows文件类型与.xml文件的关联(或不是您期望的关联)。

打开cmd窗口时会发生什么:WinKey-> R打开运行对话框,在框中键入cmd,然后在'dos'提示符下键入cmd /c D:\test.xml。会发生什么:

C:\>cmd /c C:\pnp64.xml

C:\>

对我来说,它在Internet Explorer中打开XML文件,它对你有什么用?

编辑:好的,所以它从命令行打开。现在,要调试该过程,您需要从命令中捕获标准输出/错误。我建议像:

ProcessBuilder pb = new ProcessBuilder(cmds);
pb.redirectError(new File("C:\TEMP\process.error.log"));
pb.redirectOutput(new File("C:\TEMP\process.output.log"));
Process proc = pb.start();
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);

完成这些更改后,请检查(并在此处发布...)错误和输出文件的内容。