【问题标题】:Different behavior of Java System Property 'java.io.tmpdir'Java 系统属性“java.io.tmpdir”的不同行为
【发布时间】:2015-04-16 07:36:58
【问题描述】:

当我尝试获取 String tempdir = System.getProperty("java.io.tmpdir"); 它将返回我的操作系统“临时”目录路径。例如C:\Users\DATAGU~1\AppData\Local\Temp\ 在普通的 java 应用程序中。没错。

但是当我尝试在部署在 tomcat6 上的 Web 应用程序上获取相同的属性时 它向我返回了 tomcat 临时目录路径(例如 D:\tomcat6\temp)。有人可以知道为什么会这样吗? 还有什么方法可以从我的 Web 应用程序中获取默认的 OS 临时目录路径,因为我需要将一些文件存储在临时目录中,该目录应该只是 OS 临时目录。

我也试过: 文件 temp = File.createTempFile("temp-file", "tmp"); System.out.println("临时文件:" + temp.getAbsolutePath());

此方法与上述方法具有相同的行为。 有人知道吗:)?

【问题讨论】:

    标签: java operating-system


    【解决方案1】:

    默认临时文件目录由系统属性 java.io.tmpdir 指定。在 UNIX 系统上,该属性的默认值通常是“/tmp”或“/var/tmp”;在 Microsoft Windows 系统上,它通常是“C:\WINNT\TEMP”。调用 Java 虚拟机时,可以为该系统属性赋予不同的值,但不保证对该属性的编程更改对该方法使用的临时目录有任何影响。

    From the JavaDocs

    因此,Tomcat 必须设置java.io.tmpdir 系统属性。如果您确实需要使用不同的值,则必须在此处提供。

    或者只使用File.createTempFile(String, String, File) 函数(我将其作为上面的源链接)来提供目录。这可能会更理想,因为您不必与 Tomcat 争夺谁可以设置系统属性。

    【讨论】:

    • Yeh Mike 我同意你不要手动设置系统属性,但 File.createTempFile(String, String,null) 方法也是这样做的——意味着它返回的是 tomcat 临时目录路径而不是比我需要的路径(操作系统路径),因为它对于 windows 和 linux 机器可能不同。我也不想在这种方法中手动设置文件路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2010-10-28
    • 2011-08-06
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2017-12-10
    相关资源
    最近更新 更多