2010-01-22 2 views
10

Моя программа успешно создает и заполняет файл Excel (.xls). После создания я хотел бы, чтобы новый файл открывался в программе по умолчанию для системы (Excel в моем случае). Как я могу это достичь?Открытие файла Excel с использованием программы по умолчанию

Для старой программы, где я хотел, чтобы открыть текстовый файл в блокноте, я использовал следующее:

if (!Desktop.isDesktopSupported()) { 
     System.err.println("Desktop not supported"); 
     // use alternative (Runtime.exec) 
     return; 
    } 

    Desktop desktop = Desktop.getDesktop(); 
    if (!desktop.isSupported(Desktop.Action.EDIT)) { 
     System.err.println("EDIT not supported"); 
     // use alternative (Runtime.exec) 
     return; 
    } 

    try { 
     desktop.edit(new File(this.outputFilePath)); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 

Когда я пытаюсь использовать этот код для Excel файл, он дает мне следующую ошибку:

java.io.IOException: Failed to edit file:C:/foo.xls 

Предложения?

+0

Вы можете найти аналогичный ответ здесь: jayaneetha

ответ

29

Попробуйте использовать Desktop.open() вместо Desktop.edit():

Desktop dt = Desktop.getDesktop(); 
dt.open(new File(this.outputFilePath)); 

Если Desktop.open() не доступен, то файл ассоциация Windows, может быть использована:

Process p = 
    Runtime.getRuntime() 
    .exec("rundll32 url.dll,FileProtocolHandler " + this.outputFilePath); 
+0

Спасибо, это отлично сработало – clang1234

+0

. Если я использую unix-машину вместо окон – Suman

+0

@suman, возможно, 'xdg-open', чтобы открыть приложение по умолчанию для данного типа файла, см. Http: //manpages.ubuntu.com/manpages/trusty/en/man1/xdg-open.1.html – RealHowTo

0

Возможно, вы использовали Runtime.exec неправильно. Дайте this взглянуть, не так ли.

Если вы просто хотите открыть файл Excel с помощью Java, я бы рекомендовал использовать JExcel API Andy Khan. Возможно, использование этого с Swing JTable будет всего лишь билетом.

+0

Да. Jexcel API печатает цвета более реалистичными, чем библиотека JRXlsExporter. – StarCrafter

0

Самый простой и эффективный способ.

Desktop.getDesktop().open(new File("inputFilePath"));