#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. эта проблема возникает только при наличии двух или более пробелов в имени файла.