使用进程生成器在 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");
第一个路径是您要在其中打开第二个路径的程序 - 特定文件
我有一个我在工作时为 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");
第一个路径是您要在其中打开第二个路径的程序 - 特定文件