Вопрос

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