Сведения о временном каталоге Windows (Java) - PullRequest
9 голосов
/ 09 августа 2010

Я пишу программу, которой нужна общая временная папка.Я пытаюсь найти подробную информацию о папках Windows Temp.Есть два пути, о которых я знаю -

  1. В каждом каталоге пользователя в папке AppData \ Local \ Temp \ Это может измениться в зависимости от версии Windows?

  2. В системной папке в папке Temp \ (C: \ Windows \ Temp)

Мне интересно, что конкретно Windows делает с каждым из них.Если Windows удаляет файлы из любого места, когда это происходит?Как я могу / должен использовать эти каталоги для моего программирования?

РЕДАКТИРОВАТЬ: У меня действительно большая проблема - из-за определенного движка я работаю косвенно с моей программой, которая использует файлы, которые я создаю ввременный каталог, мне нужен временный каталог, который не использует пробельные символы в пути.Java System.getProperty ("java.io.tmpdir") в Windows дает мне временную папку, которая находится в пользовательском каталоге, который в XP находится в разделе "Документы и настройки ..." Не хорошо.Какие-либо предложения?Вот почему меня интересует каталог C: \ Windows \ Temp \ ...

Ответы [ 7 ]

10 голосов
/ 28 мая 2012

Это даст вам путь к временному каталогу Windows в Java.

File.createTempFile("temp-file", "tmp").getParent()
3 голосов
/ 09 августа 2010

Не совсем. Существует пользовательская и системная папка, расположение по умолчанию которой варьируется в зависимости от версии Windows, имени системной папки, и действительно, в более старых версиях Windows была одинаковой как для пользователя, так и для системного случая. Однако эти значения по умолчанию могут быть переопределены (они находятся в системе, которую я сейчас использую, где они не находятся на том же диске, что и системная папка).

Местоположения хранятся в системных переменных. Некоторые платформы (.NET, VB6 и, без сомнения, другие) предоставляют удобные способы поиска путей, а не поиск системной переменной (например, System.IO.Path.GetTempPath в .NET).

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

В .NET System.IO.Path.GetTempFileName () создаст новый файл во временной области и вернет вам его имя, которое гарантированно не будет конфликтовать с другими, поэтому используйте этот или подобные методы, если Вы можете.

1 голос
/ 09 августа 2010

Похоже, у вас есть две программы, которые должны обмениваться временными файлами, и одна точно не хочет пробелов в имени пути.Вероятно, проще всего это сделать:

  1. установить переменные TMP и TEMP в общий каталог
  2. запустить каждое приложение (из этой измененной среды) - что должно подобрать переменную temp

Таким образом, в командной строке вы можете сделать это:

  1. установить TMP = c: \ mytemp
  2. установить TEMP = c: \ mytemp
  3. java -cp x; y; z my.application.Entry
  4. запустить другое приложение (надеюсь, оно также считывает среду для temp / tmp)

Надеюсь, это поможет.

0 голосов
/ 06 августа 2018

вы можете попробовать таким образом

System.out.println(File.createTempFile("temp-file", "tmp").getParent());
String property = "java.io.tmpdir";
String tempDir = System.getProperty(property);
System.out.println("OS current temporary directory is " + tempDir);
0 голосов
/ 10 сентября 2014

используйте этот код

   try {    String s=File.createTempFile("temp-file", "tmp").getParent();
            System.out.println(s);

        } catch (IOException ex) {
            Logger. getLogger(Result.class.getName()).log(Level.SEVERE, null, ex);
            }
0 голосов
/ 09 августа 2010

Переменная среды %TEMP%, определенная на моем ПК (XP SP3), использует имена каталогов abcdef~1 в стиле DOS - следовательно, если вы можете извлечь эту переменную, вы должны получить путь без пробелов.

например, Start>Run>%TEMP% приводит меня к C:\DOCUME~1\<user>\LOCALS~1\Temp

Однако, если «суперпользователь» возится с этой переменной и указывает ее куда-то еще, возможно, что все упадет.Вы можете посмотреть на что-то , например , чтобы получить путь 8 символов без пробелов.

0 голосов
/ 09 августа 2010

Чтобы ответить на часть вашего вопроса - если вы используете .NET, вы можете использовать метод Path.GetTempPath() пространства имен System.IO, чтобы получить местоположение временного каталога.

// Get the path of the temporary directory
string tempDir = Path.GetTempPath();

// "Creates a uniquely named, zero-byte temporary file on disk and returns the full path of that file."
string tempFile = Path.GetTempFileName();
...