如何获得本地应用程序数据文件夹中的Java? [重复](How to get local app

2019-06-17 18:29发布

可能重复:
什么是获得对本地应用程序数据目录的路径的跨平台的方式?

我正在寻找一种方式来获得本地应用程序数据文件夹,这是一个特殊的Windows文件夹,在Java中的位置。 不幸的是,以下仅适用于Windows XP的英语版使用默认设置:

System.getProperty("user.home") + "\\Local Settings\\Application Data"

我想有是在.NET这样的:

System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

有没有办法做到这一点,而不必调用SHGetSpecialFolderLocation在Windows Shell API的?

Answer 1:

读“Shell文件夹”注册表项已被弃用从Windows 95的注册表项包含一张纸条上写着出发“!不要使用此注册表项。使用SHGetFolderPath或SHGetKnownFolderPath来代替。” 我必须找到这一点的Vista系统上,所有的钥匙失踪除了警示说明的艰辛的道路。

这个计算器相关答案解决了使用JNA,这是我目前使用的解决方案在Windows这个问题。



Answer 2:

System.getenv("APPDATA")

(似乎是“本地设置”文件夹中没有环境变量,但是这会给你的“应用程序数据”文件夹中)



Answer 3:

有关下列哪些

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

我有一个情况,这是没有根据“的user.home”



Answer 4:

我想用以下两种方式:

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

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


Answer 5:

您可以读取注册表路径: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\*其中*是那些关键之一:

  • 本地应用程序数据( C:\Documents and Settings\USER\Local Settings\Application Data
  • 本地设置( C:\Documents and Settings\USER\Local Settings
  • 应用程序数据( C:\Documents and Settings\USER\Application Data

注意:这些示例路径是从英文版Windows XP安装



Answer 6:

我用这种方式解决

private static File getAppData(){
    ProcessBuilder builder = new ProcessBuilder(new String[]{"cmd", "/C echo %APPDATA%"});

    BufferedReader br = null;
    try {
        Process start = builder.start();
        br = new BufferedReader(new InputStreamReader(start.getInputStream()));
        String path = br.readLine();
        // TODO HACK do not know why but I get an extra '"' at the end
        if(path.endsWith("\"")){
            path = path.substring(0, path.length()-1);
        }
        return new File(path.trim());


    } catch (IOException ex) {
        Logger.getLogger(Util.class.getName()).log(Level.SEVERE, "Cannot get Application Data Folder", ex);
    } finally {
        if(br != null){
            try {
                br.close();
            } catch (IOException ex) {
                Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    return null;
}


Answer 7:

这将有可能产生一个过程来查询键,然后解析输出:

REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Local AppData"

老实说,虽然,我会更倾向于使用JNA或JNI。



文章来源: How to get local application data folder in Java? [duplicate]