Файл не может открыться, если в имени файла есть двойные пробелы

#java #windows #exec #spaces #rundll32

#java #Windows #exec #пробелы #rundll32

Вопрос:

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

прямая команда :

 rundll32.exe shell32.dll ShellExec_RunDLL "C:LogfilesClient_LogfilesAttachments1044image2   Copy.jpg"
  

через java: (это не работает)

 p_fileName = "C:LogfilesClient_LogfilesAttachments1044image2   Copy.jpg"
String cmd = "rundll32.exe shell32.dll ShellExec_RunDLL ";
Runtime.getRuntime().exec(cmd   """ p_fileName """);
  

Но если в имени файла есть один пробел, все в порядке и открывается правильно:

Пожалуйста, любые идеи по этому поводу и ценю вашу любезную помощь.

Комментарии:

1. Используйте ` \ ` или ` / ` вместо ` ` в строках Java.

2. этот путь к файлу определяется при чтении файла, поэтому, если в имени файла есть один пробел, эта команда работает нормально. :(. эта проблема возникает только при наличии двух или более пробелов в имени файла.

Ответ №1:

Проблема в том, что вы объединяете команду. Чтобы сделать это правильно, используйте массивную версию exec и используйте ‘/’ вместо »:

 String args[] = {
    "rundll32.exe",
    "shell32.dll",
    "ShellExec_RunDLL",
    "C:/Logfiles/Client_Logfiles/Attachments/1044/image2   Copy.jpg"
};
Runtime.getRuntime().exec(args);
  

Комментарии:

1. Да, ваше решение работает. отличная помощь и большое спасибо.

2. ProcessBuilder предпочтительнее, чем Runtime.exec.

Ответ №2:

Попробуйте с:

 p_fileName = "C:\Logfiles\Client_Logfiles\Attachments\1044\image2   Copy.jpg"
  

Или

 p_fileName = "C:/Logfiles/Client_Logfiles/Attachments/1044/image2   Copy.jpg"
  

Комментарии:

1. Это всегда должно делать одно и то же (за исключением случаев, когда вы его печатаете)

2. этот путь к файлу определяется путем чтения файла, поэтому, если в имени файла есть один пробел, эта команда работает нормально. 🙁

3. эта проблема возникает только при наличии двух или более пробелов в имени файла.