Лучший способ открыть документ с Java?

Я использую следующий код, чтобы открывать документы Office, PDF и т. д. На моих компьютерах с Windows, используя Java, и он работает нормально, за исключением некоторых причин, когда имя файла встроило его в несколько смежных пробелов, таких как «Файл [ПРОБЕЛ] [ ПРОБЕЛ] 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(
            "\\([^\\\\\"]* [^\\\\\"]*)", "\\\\"\"");

    String command = "C:\Windows\System32\cmd.exe /c start " + path + "";

    Runtime.getRuntime().exec(command);            
}

Обновлено: Когда я запускаю его с ошибочными окнами файла, он жалуется на обнаружение файла. Но ... когда я запускаю командную строку прямо из командной строки, она работает нормально.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
614
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

Не уверен, что это вам сильно поможет ... Я использую ProcessBuilder для java 1.5+ для запуска внешних сценариев оболочки в 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) {}

Проблема может заключаться в используемой вами команде "start", а не в разборе имени файла. Например, похоже, что это хорошо работает на моей машине 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();
        }
    }
}

Просто чтобы подтвердить, что вы используете C: \\ so \\ My [space] [space] Doc.doc, верно?

Allain Lalonde 11.09.2008 04:19

Другие вопросы по теме