Aller au contenu principal
~/GiwiSoft
8wgb428wgb428wgb

Comment déléguer l'ouverture d'un fichier au navigateur

Giwi 2 min de lecture Java

En développant une petite application en Swing servant d’explorateur de fichiers sur un WebDav, je me suis rendu compte qu’il aurait été sympa de visualiser les fichiers distants. Plutôt que de télécharger en local, puis d’utiliser Windows pour rechercher ce fichier et double-cliquer dessus, pourquoi ne pas s’appuyer sur le navigateur pour gérer le content-type. La question est : comment passer la patate chaude au navigateur depuis une application en Java?

Je me suis appuyé sur cet excellent article : Java Tip 66 et cette librairie : BrowserLauncher

import java.util.List;

import edu.stanford.ejalbert.BrowserLauncher;
import edu.stanford.ejalbert.exception.BrowserLaunchingInitializingException;
import edu.stanford.ejalbert.exception.UnsupportedOperatingSystemException;

public class Main {

    /**
     * @param args
     */
    @SuppressWarnings("unchecked")
    public static void main(final String\[\] args) {
        try {
            final BrowserLauncher launcher = new BrowserLauncher();
            // Afficher la liste des navigateurs disponibles
            final List browsers = launcher.getBrowserList();
            for (final String nav : browsers) {
                System.out.println(nav);
            }
            launcher.openURLinBrowser(args\[0\]);
        } catch (final BrowserLaunchingInitializingException e) {
            e.printStackTrace();
        } catch (final UnsupportedOperatingSystemException e) {
            e.printStackTrace();
        }
    }

}

Et voilà, c’est tout bête. Je vous encourage à aller visiter le site de BrowserLauncher ainsi que son API bien fournie.

Avec java.awt.Desktop (Java 6+)

Depuis Java 6, la classe java.awt.Desktop permet de déléguer l’ouverture d’URI au navigateur par défaut du système, sans aucune librairie externe. BrowserLauncher est aujourd’hui obsolète.

import java.awt.Desktop;
import java.net.URI;

public class Main {
public static void main(final String[] args) throws Exception {
if (Desktop.isDesktopSupported()) {
Desktop desktop = Desktop.getDesktop();
if (desktop.isSupported(Desktop.Action.BROWSE)) {
desktop.browse(new URI("http://example.com/fichier.pdf"));
}
}
}
}

La méthode browse(URI) ouvre l’URI dans le navigateur par défaut enregistré dans le système d’exploitation. Desktop gère aussi mail(URI), open(File) (ouvre le fichier avec l’application associée), et print(File).

Détection du navigateur par défaut

Sous Windows, le navigateur par défaut est lu dans la registry. Sous Linux, Desktop respecte les associations freedesktop.org (xdg-open). Vous pouvez aussi interroger le système :

// Alternative : lancer xdg-open directement
Runtime.getRuntime().exec(new String[]{
"xdg-open", "http://example.com"
});

Note sur BrowserLauncher

BrowserLauncher (et sa version 2) était une excellente solution à l’époque, mais n’est plus maintenue depuis des années. Préférez java.awt.Desktop pour tout projet Java 6+ - moins de dépendances, plus simple, et maintenu par le JDK lui-même.