2008-09-10 7 views
2

J'ai utilisé le code suivant pour ouvrir Office Documents, PDF, etc. sur mes machines Windows en utilisant Java et ça marche bien, sauf pour une raison quand un nom de fichier l'a intégré dans plusieurs espaces contigus comme "File [SPACE] ] [ESPACE] Test.doc ".Meilleur moyen d'ouvrir un document à partir de Java?

Comment est-ce que je peux faire ce travail? Je ne suis pas opposé à la mise en conserve de tout le code ... mais je préfère ne pas le remplacer par une bibliothèque tierce qui appelle JNI.

public static void openDocument(String path) throws IOException { 
    // Make forward slashes backslashes (for windows) 
    // Double quote any path segments with spaces in them 
    path = path.replace("/", "\\").replaceAll(
      "\\\\([^\\\\\\\\\"]* [^\\\\\\\\\"]*)", "\\\\\\\"$1\""); 

    String command = "C:\\Windows\\System32\\cmd.exe /c start " + path + ""; 

    Runtime.getRuntime().exec(command);    
} 

EDIT: Quand je lance avec les fenêtres de fichiers errantes se plaint de trouver le fichier. Mais ... quand j'exécute la ligne de commande directement à partir de la ligne de commande, ça marche très bien.

Répondre

5

Si vous utilisez Java 6, vous pouvez simplement utiliser le open method of java.awt.Desktop pour lancer le fichier en utilisant l'application par défaut de la plate-forme actuelle.

+0

Fonctionne comme un charme. Merci. –

0

Je ne sais pas si cela vous aidera beaucoup ... J'utilise java 1.5 + ProcessBuilder pour lancer des scripts shell externes dans un programme java. En fait, je fais ce qui suit: (bien que cela ne peut demander parce que vous ne voulez pas capturer la sortie de commandes, vous avez réellement envie de tirer le document de - mais peut-être cela va susciter quelque chose que vous pouvez utiliser)

List<String> command = new ArrayList<String>(); 
command.add(someExecutable); 
command.add(someArguemnt0); 
command.add(someArgument1); 
command.add(someArgument2); 
ProcessBuilder builder = new ProcessBuilder(command); 
try { 
final Process process = builder.start(); 
...  
} catch (IOException ioe) {} 
0

Le problème peut être la commande "start" que vous utilisez plutôt que l'analyse de votre nom de fichier. Par exemple, cela semble bien fonctionner sur ma machine WinXP (en utilisant JDK 1.5)

import java.io.IOException; 
import java.io.File; 

public class test { 

    public static void openDocument(String path) throws IOException { 
     path = "\"" + path + "\""; 
     File f = new File(path); 
     String command = "C:\\Windows\\System32\\cmd.exe /c " + f.getPath() + ""; 
      Runtime.getRuntime().exec(command);   
    } 

    public static void main(String[] argv) { 
     test thisApp = new test(); 
     try { 
      thisApp.openDocument("c:\\so\\My Doc.doc"); 
     } 
     catch(IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Juste pour confirmer que vous utilisez C: \\ so \\ Mon [espace] [espace] Doc.doc droit? –

Questions connexes