Как мне разобрать имена файлов Windows в Java? - PullRequest
6 голосов
/ 25 марта 2010

Из Java я извлекаю исполняемый файл в папку, указанную с помощью File.createTempFile (). Когда я пытаюсь запустить свой исполняемый файл, моя программа зависает при попытке прочитать первую строку вывода.

Я обнаружил, что если я пытаюсь запустить тот же извлеченный исполняемый файл из другой программы, он работает, если я указываю каталог как C: \ Documents and Settings \ username \ Local Settings \ Temp \ prog.exe. Но если я укажу каталог как C: \ DOCUME ~ 1 \ USERNA ~ 1 \ LOCALS ~ 1 \ Temp \ prog.exe, я получаю зависание.

Есть ли способ изменить имя файла тильды в моей программе, чтобы я мог указать имя каталога, которое будет работать?

(И поскольку мне всегда нравится решать вопросы, связанные с языком и дизайном API, есть ли какая-то причина, по которой Java File.createTempFile () и java.io.tmpdir должны вычислять искажения имен файлов?)

Ответы [ 2 ]

10 голосов
/ 25 марта 2010

Вы можете использовать getCanonicalPath(), чтобы получить расширенный путь. E.g.:

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 на ваш второй вопрос.

3 голосов
/ 25 марта 2010

Ух ты, я этого никогда не видел. Дело в том, что переменная среды% TEMP% возвращает искаженное имя (это с моего компьютера):

TEMP=C:\DOCUME~1\raviw\LOCALS~1\Temp
TMP=C:\DOCUME~1\raviw\LOCALS~1\Temp

Предполагая, что вновь создаваемая виртуальная машина Java использует переменную среды для получения местоположения временной папки, она не виновата в том, что каталоги искажены.

И даже если вы попытаетесь использовать System.getenv () , чтобы получить временную папку, у вас все равно будет та же проблема.

Я бы удостоверился, что:

  • Проблема не связана с тем, что у вас есть каталог с именем "prog.exe" (исходя из вашего вопроса, я предполагаю это);
  • Если файл «prog.exe», если он не использовался какой-либо другой программой (возможно, антивирусом);
  • Проверка правильности вашего компьютера (это будет очень важной ошибкой для любого приложения, которое не является веб-приложением и требует временных файлов).
...