我应该在Windows上存储应用程序缓存?

时间:2017-06-23 09:57:13

标签: java windows caching

我有一个下载各种文件的Windows应用程序。我想缓存这些文件,但我不确定在哪里放置缓存。它应该存在于用户的主文件夹中,以便它们始终具有访问权限,但我认为Documents等文件夹不合适。

相当于我在macOS和Linux上寻找的东西:

  • ~/Library/Caches/MyApp
  • ~/.cache/MyApp

应用程序缓存应该存储在Windows上的哪个位置?

请注意,与this question不同,我不是在询问临时文件。我的缓存应该跨会话重用。

请注意,我没有构建Windows应用商店应用。

2 个答案:

答案 0 :(得分:1)

不需要漫游的每用户数据应存储在CSIDL_LOCAL_APPDATA下。您可以通过调用SHGetFolderPath(或.NET中的Environment.GetFolderPath)来获取此路径。如果您需要在域环境中漫游数据,请使用CSIDL_APPDATA,但对于大型文件来说这不是一个好主意......

答案 1 :(得分:0)

我的最终解决方案:

public static Path getCacheFolder(final String osName, final FileSystem fs) {

    Objects.requireNotNull(osName, "osName is null");
    Objects.requireNotNull(fs, "fs is null");

    // macOS
    if (osName.toLowerCase().contains("mac")) {
        return fs.getPath(System.getProperty("user.home"), "Library", "Caches");
    }

    // Linux
    if (osName.contains("nix") || osName.contains("nux") || osName.contains("aix")) {
        return fs.getPath(System.getProperty("user.home"), ".cache");
    }

    // Windows
    if (osName.contains("indows")) {
        return fs.getPath(System.getenv("LOCALAPPDATA"), "Caches");
    }

    // A reasonable fallback
    return fs.getPath(System.getProperty("user.home"), "caches");
}