使用进程生成器在 Internet Explorer 中打开文件 Java

Using process builder to open a file in internet explorer Java

我有一个我在工作时为 Java 编写的程序,它采用 XML 并允许用户以 table 形式查看 XML,进行更改,然后将 table 另存为新的 XML.

除了一个小细节,一切都完成了。一旦用户保存 table,数据当然会被解析为新的 XML。然后我希望出现一个对话框,告诉用户保存位置并询问他们是否要打开文件。

如果用户单击“是”,那么我希望 XML 在 Internet Explorer 中打开。我已经在另一个程序中成功地使用 ProcessBuilder 实现了类似的方法,但在那种情况下,文件需要用记事本打开,效果很好。

现在我遇到的问题是,虽然 InternetExplorer 将打开文件,但浏览器将只停留在主页上。如果有人可以帮助我,我将 post 我的代码放在下面,我将不胜感激!

location = "//CamT54Revised"+date+".xml";
            location = fHandling.saveFile.getSelectedFile()+location;

            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new File(location));
            transformer.transform(source, result);

            int dialogResult = JOptionPane.showConfirmDialog(null, "Output file saved as "+location+". Would you like to view the file?","Display Output",JOptionPane.YES_NO_OPTION);
            if(dialogResult==JOptionPane.YES_OPTION){

                ProcessBuilder pb = new ProcessBuilder("C:\Program Files\Internet Explorer\iexplore.exe", location);
                try{
                    pb.start();
                }catch(IOException e){
                    e.printStackTrace();
                }

            }

我建议您使用 Desktop.open(File) 而不是 ProcessBuilder,它 启动关联的应用程序来打开文件。 类似

File f = new File(location);
Desktop.open(f);

假设 Internet Explorer 是默认浏览器,您可以使用桌面 API。

public class DesktopTest {

    public static void main(String args[]) {

        if (!Desktop.isDesktopSupported()) {
            System.err.println("Desktop not supported!");
            System.exit(-1);
        }

        Desktop desktop = Desktop.getDesktop();
        File file = new File(args[0]);

        if (desktop.isSupported(Desktop.Action.OPEN)) {
            try {
                desktop.open(file);
            }
            catch (IOException ioe) {
                System.err.println("Unable to open: " + file.getName());
            }
        }
    }
}

但是,如果您想真正强制使用 Internet Explorer,那么您可能无论如何都必须求助于您的进程构建器。

Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("C:\path\to\notepad.exe C:\path\to\file.txt");

第一个路径是您要在其中打开第二个路径的程序 - 特定文件