使用流程构建器在Internet Explorer Java中打开文件

时间:2016-02-05 16:53:33

标签: java processbuilder

我有一个我为Java工作的程序,它接受XML并允许用户以表格形式查看XML,进行更改,然后将表保存为新的XML。

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

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

现在我遇到的问题是,当InternetExplorer打开文件时将无法打开,浏览器将只停留在主页上。如果有人能帮助我,我会在下面发布我的代码,我非常感激!

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();
                }

            }

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

假设Internet Explorer是默认浏览器,您可以使用Desktop 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,那么你可能不得不求助于你的流程构建器。

答案 2 :(得分:0)

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

第一个路径是您想要打开第二个路径特定文件的程序