我有一个我为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();
}
}
答案 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");
第一个路径是您想要打开第二个路径特定文件的程序