【问题标题】:Creating directory in Application Support or %appdata%在 Application Support 或 %appdata% 中创建目录
【发布时间】:2026-02-09 17:15:02
【问题描述】:

我已经熟悉如何创建文件并将它们放在“user.home”中。我在 Mac 上,所以对 PC 的文件夹不太了解,但在我的库中,有应用程序支持。有没有办法在 PC 的 %appdata% 中放置目录?

【问题讨论】:

  • 什么是PC?您想在 MAC 上获取“应用程序支持”文件夹吗?还是在 Windows 上获取“Ap​​plicationData”文件夹?
  • 他的意思是Windows上的“应用程序数据”文件夹,默认情况下是当前用户的%APPDATA%。但是,我以前从未听说过 Windows 术语中的“应用程序支持”。顺便说一句,%APPDATA% 需要管理员权限才能修改其内容。 user.home 的等效 Windows 文件夹是 %USERPROFILE%。要使用任何 Windows 环境变量,只需使用 System.getenv(string);。例如:System.getenv("USERPROFILE");System.getProperty("user.home");
  • 为什么不简单地使用user.home(的子目录)作为路径?这应该适用于 OS X、Windows & *nix.
  • 是的,我的意思是 Windows 的应用程序数据,但 Mac 有它自己的应用程序支持。所以我想我会检查一个用户是否有"user.home" + "\\Local Settings\\ApplicationData"(PC),如果没有,我就把它放在"user.home" + "/Library/Application Support"(MAC)中。
  • @AmundeepSingh 您可以使用System.getProperty("os.name") 来检测您首先使用的操作系统(OS)类型。

标签: java directory


【解决方案1】:

Windows 上的 AppData 文件夹是“{user.home}\Local Settings\ApplicationData”;

你可以用这个得到它:

    String dataFolder = System.getProperty("user.home") + "\\Local Settings\\ApplicationData";

或者这样,但它只适用于 Windows,因为 env 变量 'APPDATA' 仅在 Windows 下可用。

    String dataFolder = System.getenv("APPDATA");  

更多信息,您可以查看How to get local application data folder in Java?

【讨论】:

  • 请注意,第一种方法与语言有关,并受this issue 影响,因此第二种方法应该更可靠。
【解决方案2】:

这是我使用的代码,你可以使用它:

公共文件管理器(){

String FileFolder = System.getenv("APPDATA") + "\\" + "Launcher";

System.out.println("Searching for system");

String os = System.getProperty("os.name").toUpperCase();
if (os.contains("WIN")) {
    FileFolder = System.getenv("APPDATA") + "\\" + "Launcher";
    System.out.println("Found windows");
}
if (os.contains("MAC")) {
    FileFolder = System.getProperty("user.home") + "/Library/Application " + "Support"
            + "Launcher";
    System.out.println("Found mac");
}
if (os.contains("NUX")) {
    FileFolder = System.getProperty("user.dir") + ".Launcher";
    System.out.println("Found linux");
}

System.out.println("Searching for resource folder");
File directory = new File(FileFolder);

if (directory.exists()) {
    System.out.println("Found folder");
}

if (directory.exists() == false) {
    directory.mkdir();
    System.out.println("Could not find folder so created it");
}

}

只有在windows上测试过才能在mac/Linux上测试?

【讨论】: