Как я могу отменять имена файлов Windows в Java?
-
22-09-2019 - |
Вопрос
Из Java я извлекаю исполняемый файл в местоположение, указанное с использованием file.createtempfile (). Когда я пытаюсь запустить свой исполняемый файл, моя программа висит, когда пытается прочитать первую строку вывода.
Я обнаружил, что если я попытаюсь запустить тот же извлеченный исполняемый файл из другой программы, он работает, если я укажу каталог как C: Documents and Settings usermance Local Settings Temp Prog.exe. Но если я укажу каталог как c: docume ~ 1 userna ~ 1 локальные жители ~ 1 temp prog.exe я получаю зависание.
Есть ли способ заменять имя файла Tilde в моей программе, чтобы я мог указать имя каталога, которое будет работать?
(И так как мне всегда нравится решать проблемы языка и дизайна API, есть ли какие -либо причины, по которой Java file.createtempfile () и java.io.tmpdir должны оценить в изуродованные имена файлов?)
Решение
Вы можете использовать getCanonicalPath()
Чтобы получить расширенный путь. Например:
try
{
File file = File.createTempFile("abc", null);
System.out.println(file.getPath());
System.out.println(file.getCanonicalPath());
}
catch (IOException e) {}
... производит ...
C:\DOCUME~1\USERNA~1\LOCALS~1\Temp\abc49634.tmp C:\Documents and Settings\username\Local Settings\Temp\abc49634.tmp
Я проверил это на XP, но предполагаю, что это будет работать аналогичным образом в других операционных системах Windows.
Смотрите ответ @Raviaw на ваш второй вопрос.
Другие советы
Вау, я никогда этого не видел. Дело в том, что переменная среды % temp % возвращает изуродованное имя (это от моего компьютера):
TEMP=C:\DOCUME~1\raviw\LOCALS~1\Temp TMP=C:\DOCUME~1\raviw\LOCALS~1\Temp
Предполагая, что вновь создавая виртуальную машину Java использует переменную среды для получения временной папки, не видно виртуальной машины, что каталоги искажаются.
И даже если вы попытаетесь использовать System.getenv () Чтобы получить временную папку, у вас все же будет такая же проблема.
Я бы позаботился о том, чтобы:
- Проблема не вызвана тем фактом, что у вас есть каталог под названием «prog.exe» (на основе вашего вопроса, я предполагаю это);
- Если файл «prog.exe», если он не использовался какой -либо другой программой (может быть, антивирус);
- Проверка, если ваш компьютер вменяет (это будет очень критической ошибкой для любого приложения, которое не является веб -приложением и требует временных файлов).