Intereting Posts
Команда Node не работает в терминале git bash на windowsх Лучший способ демонстрации приложения Java на Linux Поддерживает ли realloc выравнивание памяти posix_memalign? android у вас нет прав доступа / на этом сервере WAMP Является ли clock_nanosleep воздействием adjtime и NTP? Связывание 40 сокетов на 40 различных IP-адресов Apache: включить htaccess в conf с AllowOverride Нет, лучше производительность? Как определить путь контекста приложения Node.js? Почему стек меньше, чем текст в памяти? Как разрешить ошибку SVN? E200030: В «» «обнаружены недоконченные транзакции?»? Как скопировать файл в несколько каталогов с помощью команды gnu cp Приложение Django 1.8 показывает папку strucutre при добавлении SSL Как заставить команду Windows START принимать стандартный ввод через канал и передать его команде, которую она вызывает? Простой карет (^) в конце пакетного файла Windows потребляет всю память VC ++: Как получить время и дату файла?

Как мне переписать имена файлов Windows на Java?

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

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

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

(И так как мне всегда нравятся проблемы с языком и дизайном 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-виртуальная машина использует переменную окружения для получения временного расположения папки, это не ошибка VM в том, что каталоги будут искажены.

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

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

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