OVH Cloud OVH Cloud

exécuter le programme lié à un fichier

8 réponses
Avatar
Dollar Stéphane
Bonjour,

Je voudrais que mon application en java lance le programme lié à
l'extension d'un fichier. Par exemple si l'extension est .txt alors je
demande que l'éditeur de texte par défault s'exécute, ...
Mon gros problème vient du fait que je voudrais que ce soit
multi-plateforme.
linux (kde, gnome)
windows
mac

Il y a toujours la solution d'ouvrir une boîte de dialogue et de laisser
l'utilisateur choisir les programmes qui correspondent, mais cela
suppose que l'utilisateur connaisse un peu sa machine...

Merci d'avance pour tout suggestion.

8 réponses

Avatar
damien guerin
Et directement :
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("test.txt");

ça donne quoi???
Avatar
Dollar Stéphane

Et directement :
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("test.txt");

ça donne quoi???



Non, ça ne fait rien. ça ne marche que si je mets sous win$

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("notepad test.txt");

Avatar
Simon OUALID
damien guerin wrote:
Et directement :
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("test.txt");

ça donne quoi???



Si je me souviens bien, sous Windows, il faut appeler l'interpréteur de
commande et start, avec un path absolu.

Ca donne :

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("cmd /c c:test.txt");


Par contre c'est pas portable du tout, mais je crois me souvenir qu'un
projet sourceforge proposait une solution portable pour ça, mais
impossible de me souvenir de son nom, désolé !

Avatar
JSC
Dollar Stéphane wrote:
Bonjour,

Je voudrais que mon application en java lance le programme lié à
l'extension d'un fichier.


C'est une question qui revient souvent, et que j'ai eu a resoudre pour
une de mes appli aussi.
Voici le code que j'utilise, qui fonctionne sous Windows et sous Mac OS X.

<code>
public class FileOpener {

private static final int NONE = -1;
private static final int WIN = 1;
private static final int MAC = 2;
private static final int UX = 3;
private static int OS = NONE;

static {
String os = System.getProperty("os.name", "").toLowerCase();
if(os.indexOf("windows") >= 0) {
OS = WIN;
} else if((os.indexOf("mac") >= 0) || (os.indexOf("darwin") >= 0)) {
OS = MAC;
} else if((os.indexOf("linux") >= 0) || (os.indexOf("unix") >= 0)
|| (os.indexOf("bsd") >= 0)) {
OS = UX;
}
}

public static void open(String file) {
String[] cmd = null;
File ff = null;
switch (OS) {
case WIN:
cmd = new String[] { "cmd", "/c", """ + file + """ };
break;
case MAC:
cmd = new String[] { "open", file };
break;
case UX:
// Pas supporte
cmd = null;
break;
default:
cmd = null;
}
try {
if(cmd != null) {
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
}
} catch (Exception exc) {
exc.printStackTrace();
}
}
}
</code>

Pour l'utiliser, c'est simple:

FileOpener.open("c:foobarfile.pdf"); // windows
FileOpener.open("/Volumes/Macosx/users/tod/file.pdf"); // mac


--
JSC

Avatar
alexandre cartapanis
Bonjour,

Je voudrais que mon application en java lance le programme lié à
l'extension d'un fichier. Par exemple si l'extension est .txt alors je
demande que l'éditeur de texte par défault s'exécute, ...
Mon gros problème vient du fait que je voudrais que ce soit
multi-plateforme.
linux (kde, gnome)
windows
mac

Il y a toujours la solution d'ouvrir une boîte de dialogue et de laisser
l'utilisateur choisir les programmes qui correspondent, mais cela
suppose que l'utilisateur connaisse un peu sa machine...

Merci d'avance pour tout suggestion.


La meilleur solution pour cela (et plus encore): JDIC
Cette API te permet d'utiliser certaines caracteristiques du systeme,
que ce soit sous windows ou sous linux/solaris.

https://jdic.dev.java.net/

Avatar
Johann Burkard
JSC wrote:
case WIN:
cmd = new String[] { "cmd", "/c", """ + file + """ };


C'est pas mal, mais sur Windows 95, 98, 98SE et ME, il y'a pas de "cmd".
Là, il te faut "command".

Johann
--
Bitte unbedingt Genehmigung dafür per eMail an eine meiner Adressen
schicken und zwar posted und mailed.
(Uwe Premer in )

Avatar
Dollar Stéphane
Merci à tous pour vos réponses, je vais essayer d'adapter à linux et si
j'y parviens, je vous donnerai mon morceau de programme.
Avatar
Eric Razny
Le Thu, 21 Jul 2005 11:25:49 +0200, Johann Burkard a écrit :

JSC wrote:
case WIN:
cmd = new String[] { "cmd", "/c", """ + file + """ };


C'est pas mal, mais sur Windows 95, 98, 98SE et ME, il y'a pas de "cmd".
Là, il te faut "command".


Bonjour.
Perso j'utilise quand je détecte de l'OS Mickey$oft :

"rundll32 url.dll,FileProtocolHandler " suivi du fichier.

Je n'ai pas eu de retour négatif, ça semble OK sous 98 (j'ai pas de 95
qui traine), ME, XP, 2000 ...

C'est plus "windowsien" que de passer par cmd ou surtout command qui en
plus ne marchent pas dans certains cas.

open marche bien sous Mac apparement (je n'ai testé que sous OS/X).

Je n'ai malheureusement pas de solution toute faite sous linux/unix mais
souvent un mozilla traine et se démerde ensuite pour lancer le bon
programme :) Ca vaut le coup de pense de tenter déjà ça.

Je pense que si on se restraint à Linux KDE/Gnome ça doit être plus
simple.


Eric

PS :
JDIC ne me convenais pas à cause des problèmes d'install ; je veux une
solution qui ne demande pas à quelqu'un de modifier sa config java,
d'ajouter des dll etc, sinon amha autant partir sur du JNI (ceci dit il
faudra que je retourne voir comment ça évolue).