Pregunta

He estado usando el siguiente código para abrir Documentos de Office, PDF, etc.en mi máquinas windows usando Java y funciona muy bien, excepto por alguna razón, cuando el nombre de un archivo se ha integrado dentro de los múltiples espacios contiguos como "Archivo[espacio][ESPACIO]Test.doc".

¿Cómo puedo hacer que esto funcione?Yo no soy reacio a canning toda la pieza de código...pero prefiero no sustituir con una biblioteca de terceros que llama 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);            
}

EDITAR: Cuando lo ejecuto con el errante archivo de windows se queja acerca de encontrar el archivo.Pero...al ejecutar la línea de comandos directamente desde la línea de comando que se ejecuta bien.

¿Fue útil?

Solución

Si usted está usando Java 6 puedes usar el método abierto de java.awt.Escritorio para iniciar el archivo con la aplicación predeterminada para la plataforma actual.

Otros consejos

No estoy seguro si esto va a ayudar mucho...Yo uso java 1.5+'s ProcessBuilder para el lanzamiento externo de secuencias de comandos de shell en un programa java.Básicamente hago lo siguiente:( aunque esto puede no aplicar porque usted no desea capturar los comandos de salida;realmente quiero el fuego el documento - pero, tal vez esto sirva de algo, que puede utilizar )

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

El problema puede ser el "inicio" de comandos que está utilizando, en lugar de su nombre de archivo de análisis.Por ejemplo, esto parece funcionar bien en mi WinXP máquina (mediante el 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();
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top