Есть ли способ создать 8.3 или «короткую» (Windows) версию имени файла в Java?

В нашем приложении мы разрешаем пользователям открывать файлы и каталоги.

Java 6 предоставляет нам...

java.awt.Desktop.getDesktop().open(file);

который прекрасно работает. Однако, поскольку нам необходимо обеспечить совместимость с Java 5, мы также реализуем метод открытия файлов, вызывая команду start в cmd.exe...

String command = "cmd.exe start ...";
Runtime.getRuntime().exec(command);

Вот где проявляется проблема. Похоже, что команда start может обрабатывать только имена файлов 8.3, что означает, что любые не- короткие (8.3) имена файлов/каталогов приводят к сбою команды start.

Есть ли простой способ генерировать эти короткие имена? Или любые другие обходные пути?


person thedude19    schedule 09.06.2009    source источник


Ответы (3)


Попробуйте что-нибудь вроде этого

import java.io.IOException;

class StartExcel {
    public static void main(String args[])
        throws IOException
    {
        String fileName = "c:\\temp\\xls\\test2.xls";
        String[] commands = {"cmd", "/c", "start", "\"DummyTitle\"",fileName};
        Runtime.getRuntime().exec(commands);
    }
}

Важно передать фиктивный заголовок команде запуска Windows, если есть вероятность, что имя файла содержит пробел. Это особенность.

person RealHowTo    schedule 09.06.2009

Попробуйте это: http://dolf.trieschnigg.nl/eightpointthree/eightpointthree.html

person jjxtra    schedule 09.06.2009

Или вы можете попробовать:

Runtime.getRuntime().exec(
  new String[] { System.getenv("windir") + "\\system32\\rundll32.exe",
    "shell32.dll,ShellExec_RunDLL", "http://www.stackoverflow.com" });

Источник: http://www.rgagnon.com/javadetails/java-0014.html< /а>

person Peter Smith    schedule 10.06.2009