Windows临时目录详细信息(Java)

我正在写一个需要一个通用的临时文件的程序。 我试图find有关Windows Temp文件夹的详细信息。 有两条路我知道 –

  1. 在每个用户目录下的AppData \ Local \ Temp \这可能会改变取决于Windows版本?

  2. 在Temp \(C:\ Windows \ Temp)下的系统文件夹中,

我想知道Windows究竟是如何做到的。 如果Windows从任一位置删除文件,它是什么时候执行的? 我怎么能/应该使用这些目录进行编程?

编辑:其实我有一个更大的问题 – 因为一个特定的引擎间接运行我的程序,它使用我在临时目录中创build的文件,我需要一个临时目录不使用path中的空白字符。 在Windows上的Java的System.getProperty(“java.io.tmpdir”)给了我在用户目录中的临时工,在XP下是在“文件和设置…”不好。 有什么build议么? 这就是为什么我想知道关于C:\ Windows \ Temp \目录…

Solutions Collecting From Web of "Windows临时目录详细信息(Java)"

不完全的。 有一个用户和系统文件夹,其默认位置根据Windows版本,系统文件夹名称而有所不同,事实上,在旧版本的Windows中,用户和系统的情况都是一样的。 但是,这些默认值可能会被覆盖(它们在我现在正在使用的系统上,它们与系统文件夹不在同一个驱动器上)。

位置存储在系统变量中。 有些框架(.NET,VB6,毫无疑问是其他框架)为您提供了便捷的方法来查找路径,而不必查找系统变量(例如.NET中的System.IO.Path.GetTempPath)。

Windows不会为你清理临时文件夹(这就是为什么在你自己的机器上每隔几个月就需要爆破旧文件的原因)。 创建一个文件或文件不太可能使用任何其他软件正在使用的名称(他们应该小心地做同样的事情,所以任何名字都应该这样做,但假设系统上的其他代码更糟)总是好的,删除文件,当你完成(或至少在应用程序退出)。

在.NET System.IO.Path.GetTempFileName()将在临时区域创建一个新文件,并返回给你的名字,这是合理保证不与他人冲突,所以使用该方法或类似的方法,如果可以的话。

这会给你在Java中的Windows临时目录的路径。

File.createTempFile("temp-file", "tmp").getParent() 

这听起来像你有两个程序需要共享临时文件,一个绝对不需要路径名称中的空格。 可能最简单的做法是:

  1. 将TMP和TEMP变量设置为一个公共目录
  2. 启动每个应用程序(从这个修改的环境) – 应该拿起临时变量

所以在命令提示符下你可以这样做:

  1. 设置TMP = c:\ mytemp
  2. 设置TEMP = c:\ mytemp
  3. java -cp x; y; z my.application.Entry
  4. 运行其他应用程序(希望它也可以读取temp / tmp的环境)

希望有所帮助。

要回答你的问题的一部分 – 如果你使用.NET,你可以使用System.IO命名空间的Path.GetTempPath()方法来获取临时目录的位置。

 // 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(); 

在我的PC(XP SP3)上定义的%TEMP%环境变量使用DOS风格的abcdef~1目录名 – 因此,如果您可以拉取该变量,则最终将得到一个无空格的路径。

例如Start>Run>%TEMP%把我带到C:\DOCUME~1\<user>\LOCALS~1\Temp

但是,如果一个“超级用户”摆弄这个变量并把它指向别的地方,那么事情就有可能会崩溃。 你可以看看这样的东西来检索8个字符和无空格的路径。

使用这个代码

  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); }