Domanda

Sto usando il seguente codice per aprire i Documenti Office, PDF, etc.sul mio computer windows utilizzando Java e funziona bene, tranne che per qualche motivo quando un file è inserito all'interno di esso più spazi contigui come "File[spazio][SPAZIO]Test.doc".

Come posso fare questo lavoro?Io non sono contrario a inscatolare tutto il pezzo di codice...ma non vorrei sostituirla con una libreria di terze parti, che chiama 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: Quando ho eseguito con il controllo file di windows si lamenta di trovare il file.Ma...quando si esegue la riga di comando direttamente da riga di comando funziona bene.

È stato utile?

Soluzione

Se si utilizza Java 6 è possibile utilizzare solo la metodo aperto di java.awt.Desktop per avviare il file utilizzando l'applicazione predefinita per la piattaforma corrente.

Altri suggerimenti

Non sono sicuro se questo ti aiuterà molto...Io uso java 1.5+'s ProcessBuilder per il lancio di esterno di script di shell in un programma java.Fondamentalmente io faccio il seguente:( anche se questo non può essere applicato perché non si desidera catturare i comandi di uscita;in realtà si vuole accendere il documento - ma, forse, questo sarà scintilla, qualcosa che si può usare )

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

Il problema potrebbe essere il comando "start" che si sta utilizzando, piuttosto che il nome del file di parsing.Per esempio, questo sembra funzionare bene sul mio WinXP macchina (tramite 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();
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top