Использование построителя процессов для открытия файла в Internet Explorer Java

У меня есть программа, которую я написал для Java на работе, которая принимает XML и позволяет пользователям просматривать XML в виде таблицы, вносить изменения, а затем сохранять таблицу как новый XML.

Все готово, кроме одной маленькой детали. Как только пользователь сохраняет таблицу, данные, конечно же, преобразуются в новый XML. Затем я хочу, чтобы появилось диалоговое окно, которое сообщает пользователю место сохранения и спрашивает, хотят ли они открыть файл.

Если пользователь нажимает «да», я хочу, чтобы XML открывался в Internet Explorer. Я успешно применил аналогичный подход с 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();
                }

            }

person jesric1029    schedule 05.02.2016    source источник
comment
Windows не использует косую черту (//), поэтому значение location не понимается IE. Почему он вообще начинается с //?   -  person Andreas    schedule 05.02.2016


Ответы (3)


Предположим, что 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, вам, вероятно, все равно придется прибегнуть к компоновщику процессов.

person Edwin Dalorzo    schedule 05.02.2016
comment
Мне нужно принудительно установить Internet Explorer. Если я использую этот подход, он откроется с помощью Блокнота, что бесполезно, потому что он не будет в формате, удобном для чтения. Предложения? - person jesric1029; 05.02.2016

Вместо ProcessBuilder я бы рекомендовал использовать Desktop.open(File), который запускает соответствующее приложение для открытия файла. Что-то вроде

File f = new File(location);
Desktop.open(f);
person Elliott Frisch    schedule 05.02.2016
comment
Я считаю, что настоящая проблема OP - это // в начале значения location, но я согласен, что это лучший способ открыть файл, как его назвал OP. +1 Обработка значения location через объект File преобразует // в \\ , но \\filename не является допустимым путем в Windows, поэтому, вероятно, тоже не сработает. - person Andreas; 05.02.2016
comment
Андреас. Если то, что вы говорите, правда, то почему, когда я использую C:\\Program Files\\Internet Explorer\\iexplore.exe, Internet Explorer все еще открывается? (Только не с моим файлом). Проблема с вашим предложением, Эллиот, заключается в том, что мне нужно ЗАСТАВИТЬ Internet Explorer, чтобы открыть файл, иначе файл просто откроется с помощью блокнота и не будет в формате, понятном пользователю. - person jesric1029; 05.02.2016

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

Первый путь - это программа, в которой вы хотите открыть второй путь - конкретный файл

person Jaroslav Štreit    schedule 29.07.2016