Question

J'ai été en utilisant le code suivant pour ouvrir des Documents Office, PDF, etc.sur mes machines windows à l'aide de Java, et ça fonctionne bien, sauf pour une raison quelconque, quand un nom de fichier est incorporé dans plusieurs espaces contigus "comme Fichier[ESPACE][ESPACE]Test.doc".

Comment puis-je faire ce travail?Je ne suis pas opposé à la mise en conserve l'intégralité du morceau de code...mais je préfère ne pas le remplacer par un tiers bibliothèque 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 le lance avec l'errant de fichiers windows se plaint de trouver le fichier.Mais...quand je lance la ligne de commande directement à partir de la ligne de commande, il fonctionne très bien.

Était-ce utile?

La solution

Si vous utilisez la version 6 de Java, vous pouvez utiliser le méthode ouverte de java.awt.Bureau pour lancer le fichier en utilisant l'application par défaut de la plate-forme actuelle.

Autres conseils

Vous ne savez pas si cela va beaucoup vous aider...J'utilise java 1.5+s ProcessBuilder à l'externe de lancement des scripts shell dans un programme java.Fondamentalement, je ne les suivants:( bien que cela puisse ne pas s'appliquer parce que vous ne voulez pas capturer les commandes de sortie;vous avez réellement envie de le feu jusqu'à ce document - mais, peut-être que ce sera l'étincelle de 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) {}

Le problème est peut-être le "début" de la commande que vous utilisez, plutôt que votre nom de fichier de l'analyse.Par exemple, cela semble fonctionner très bien sur mon WinXP machine (à l'aide du 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();
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top