Frage

Ich habe den folgenden Code verwendet, um Office-Dokumente, PDF usw. zu öffnen.auf meinen Windows-Rechnern mit Java und es funktioniert einwandfrei, außer aus irgendeinem Grund, wenn ein Dateiname mehrere zusammenhängende Leerzeichen wie „Datei[SPACE][SPACE]Test.doc“ eingebettet hat.

Wie kann ich das zum Laufen bringen?Ich bin nicht abgeneigt, den gesamten Code einzubrennen ...aber ich würde es lieber nicht durch eine Drittanbieterbibliothek ersetzen, die JNI aufruft.

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);            
}

BEARBEITEN: Wenn ich es mit der fehlerhaften Datei ausführe, beschwert sich Windows darüber, dass die Datei gefunden wird.Aber...Wenn ich die Befehlszeile direkt von der Befehlszeile aus ausführe, läuft alles einwandfrei.

War es hilfreich?

Lösung

Wenn Sie mit Java 6 können Sie einfach die Methode der offene java.awt.Desktop die Datei mit der Standardanwendung für die aktuelle Plattform zu starten.

Andere Tipps

Nicht sicher, ob dies wird Ihnen viel helfen ... verwende ich Java 1.5 + 's Process externe Shell-Skripten in einem Java-Programm zu starten. Im Grunde habe ich die folgenden: (obwohl dies nicht gelten, weil Sie nicht die Befehle ausgegeben erfassen möchten, Sie eigentlich wollen feuern das Dokument - aber vielleicht wird dies etwas auslösen, die Sie verwenden können)

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) {}

Das Problem kann der Befehl „Start“ werden Sie verwenden, anstatt Ihre Dateinamen Parsing. Zum Beispiel scheint dies gut auf meiner WinXP Maschine zu arbeiten (mit 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();
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top