Pergunta

Tenho usado o seguinte código para abrir documentos do Office, PDF, etc.em minhas máquinas Windows usando Java e está funcionando bem, exceto por algum motivo, quando um nome de arquivo o incorporou em vários espaços contíguos, como "Arquivo[SPACE][SPACE]Test.doc".

Como posso fazer isso funcionar?Não sou avesso a enlatar todo o código ...mas prefiro não substituí-la por uma biblioteca de terceiros que chame 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: Quando eu o executo com o arquivo errado, o Windows reclama de encontrar o arquivo.Mas...quando executo a linha de comando diretamente da linha de comando, ela funciona perfeitamente.

Foi útil?

Solução

Se você estiver usando Java 6, você pode simplesmente usar o método aberto de java.awt.Desktop para iniciar o arquivo usando o aplicativo padrão da plataforma atual.

Outras dicas

Não tenho certeza se isso vai te ajudar muito ...Eu uso Java 1.5+ Construtor de Processos para iniciar scripts de shell externos em um programa java.Basicamente eu faço o seguinte:(embora isso possa não se aplicar porque você não deseja capturar a saída dos comandos;você realmente quer iniciar o documento - mas talvez isso desencadeie algo que você possa usar)

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

O problema pode ser o comando "iniciar" que você está usando, em vez da análise do nome do arquivo.Por exemplo, isso parece funcionar bem na minha máquina WinXP (usando 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top