Вопрос

Я использовал следующий код для открытия документов 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);            
}

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

Это было полезно?

Решение

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

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

Не уверен, что это вам сильно поможет...Я использую 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) {}

Проблема может быть в используемой вами команде «Пуск», а не в синтаксическом анализе имени файла.Например, похоже, это хорошо работает на моей машине с 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();
        }
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top