2010-06-07 13 views
2

Je souhaite ouvrir un fichier (disons, un document Word) à partir d'une application Java en utilisant le programme associé installé sur l'ordinateur (dans cet exemple, en utilisant MS Word ou Open Office Écrivain). Le problème est que je veux attendre jusqu'à ce que ce sous-processus se termine, ce qui peut être fait en utilisant la méthode waitFor() dans la classe Process.Trouver le programme associé pour ouvrir un fichier en utilisant Java

String executable = findAssociatedApplicationPath(); //for example, returns "C:\\Program Files\\Microsoft Office\\Office12\\msword.exe" 
Process p = Runtime.getRuntime().exec(executable + " " + filepath); 
p.waitFor(); 

Quelqu'un peut-il me dire comment écrire la méthode findAssociatedApplicationPath() il retourne l'exécutable correct? Ou est-ce qu'il y a un autre moyen de le faire?

Répondre

2

La manière appropriée, indépendante de la plateforme, d'ouvrir un fichier à l'aide du programme associé est Desktop.open(). Malheureusement, il n'offre aucun moyen d'interagir avec le processus résultant.

Si vous êtes prêt à perdre la plate-forme independance, vous pouvez utiliser la commande start dans cmd.exe:

String fileName = "c:\\tmp\\test.doc"; 
String[] commands = {"cmd", "/c", "start", "\"Title\"",fileName}; 
Process p = Runtime.getRuntime().exec(commands); 
p.waitFor() 
0

Il n'y a aucun moyen pur Java pour ce faire, car il est nécessairement spécifique à l'OS. Sur une plateforme Windows, the start command est probablement ce que vous cherchez (par exemple, start myfile.txt).

0

Il n'y a pas de façon "universelle" de le faire sur toutes les plates-formes. Sous Windows, vous pouvez exécuter "start", qui trouvera le bon exécutable associé. Sur le mac, vous pouvez exécuter "open". Sous Linux, je crains que vous ne deviez cartographier manuellement les applications préférées autant que je sache.

String execName = ("cmd /c \"start " + filename + "\""); 
+0

Linux a aussi des solutions en fonction de la plate-forme que Windows, sauf qu'ils varient d'une installation à. Gnome a gnome-open, par exemple. –

0

Vous pouvez essayer de mess avec le registre de Windows et d'autres paramètres spécifiques à la plate-forme, mais je pense que la meilleure solution est d'avoir simplement l'application a son propre paramètre préférences.

Vous pouvez utiliser les classes dans package java.util.prefs pour cela.

0

Je l'ai compris. En utilisant le combo cmd.exe + start.exe, la méthode waitFor() n'attendra pas la fin du sous-processus.

Si vous le faites sans l'option de démarrage, il fonctionne comme un charme (Windows uniquement si):

Process p = Runtime.getRuntime().exec("cmd /c \"" + filename + "\""); //extra quotes for filenames with spaces 
p.waitFor()