Каков наилучший эквивалент окон для/tmp?

Я хочу улучшить кросс-платформенное поведение приложения Java. Однако в его наборе тестов в настоящее время предполагается существование каталога /tmp.

Какое наилучшее эквивалентное местоположение на платформе Windows? Нотабене Я определенно не хочу предполагать, что у пользователя есть права администратора, но я хочу, чтобы он работал, по крайней мере, на XP, Vista и Windows7.

Есть ли существующая переменная среды, которая могла бы помочь, и/или набор предпочтительных мест, которые я мог бы попробовать в порядке предпочтения?

Ответы

Ответ 1

Системное свойство java.io.tmpdir может использоваться для временного каталога пользователя:

File tmp = new File(System.getProperty("java.io.tmpdir"));

Это может быть предпочтительнее File.createTempFile (которое в любом случае использует системное свойство tmpdir под капотом) в том экземпляре, где вы хотите искать временные файлы (например, кэшированные данные из предыдущего вызова вашего приложения, которое звучит так, как будто это может быть из вашего вопроса).

Вы можете изменить значение системного свойства, предоставив в командной строке переопределение (a JVM): -Djava.io.tmpdir=C:\foo\bar

Примечание. проблема "trailing slash" , описанная в комментариях к seth-ответу ниже, можно избежать, используя соответствующий конструктор File:

String fileName = "foobar.txt"
String tmpPath = System.getProperty("java.io.tmpdir");
File tmpFile;
tmpFile = new File(tmpPath + File.separator + fileName); //possible problem
tmpFile = new File(new File(tmpPath), fileName); //OK!

Очевидно, что окна также имеют переменную среды DOS %TEMP%, которая может использоваться из любых скриптов, которые у вас есть

Ответ 3

Windows определяет переменные среды TEMP и TMP, которые предоставляют текущую временную папку пользователя.

Ответ 4

Используйте File.createTempFile("myPrefix","mySuffix").

Ответ 5

Если вы хотите настаивать на выполнении чего-то конкретного окна, вы можете использовать переменную среды %temp%.