Лучший способ открыть документ из Java? - PullRequest
2 голосов
/ 10 сентября 2008

Я использовал следующий код для открытия документов Office, PDF и т. Д. На компьютерах с Windows, использующих Java, и он работает нормально, за исключением некоторой причины, когда имя файла внедряет его в несколько смежных пробелов, таких как «File [ SPACE] [SPACE] Test.doc».

Как я могу заставить эту работу? Я не против консервировать весь кусок кода ... но я бы не стал заменять его сторонней библиотекой, которая вызывает 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);            
}

РЕДАКТИРОВАТЬ: Когда я запускаю его с ошибочными файлами Windows, жалуется на поиск файла. Но ... когда я запускаю командную строку прямо из командной строки, она работает просто отлично.

Ответы [ 3 ]

5 голосов
/ 10 сентября 2008

Если вы используете Java 6, вы можете просто использовать метод open java.awt.Desktop , чтобы запустить файл с использованием приложения по умолчанию для текущей платформы.

0 голосов
/ 10 сентября 2008

Возможно, проблема в том, что вы используете команду «Пуск», а не в разборе имени вашего файла. Например, похоже, это хорошо работает на моей машине WinXP (с использованием 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();
        }
    }
}
0 голосов
/ 10 сентября 2008

Не уверен, что это вам сильно поможет ... Я использую java 1.5+ ProcessBuilder для запуска сценариев внешней оболочки в java-программе. В основном я делаю следующее: (хотя это может не применяться, потому что вы не хотите захватывать вывод команд; вы действительно хотите запустить документ - но, возможно, это вызовет что-то, что вы можете использовать)

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) {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...