为什么 Java 属性 文件在 C:\Windows 中不可见

Why are Java property files not visible in C:\Windows

我有一个 Java 程序“PropertyWrite”,用于将 属性 文件“crazy.properties”写入目录 C:\Windows

import java.io.*;
import java.util.Properties;

public class PropertyWrite {

    public static void main(String[] args) throws Exception {

        File myprop = new File("C:\WINDOWS\crazy.properties");

        Properties props = new Properties();
        props.setProperty("testprop", "crazy");
        OutputStream os = new FileOutputStream(myprop);
        props.store(os, "comment");
        os.close();

        System.out.println(myprop.exists()); // returns true
    }
}

当我通过 Windows 文件资源管理器搜索该文件时,它不可见
另外“Cmd -> dir”不显示文件
不知怎的,文件似乎被隐藏了

如果我尝试用我的程序“PropertyRead”读取文件
它工作正常,并按预期打印值“crazy”

import java.io.*;
import java.util.Properties;

public class PropertyRead {

    public static void main(String[] args) throws Exception {

        File myprop = new File("C:\WINDOWS\crazy.properties");
        System.out.println(myprop.exists()); // returns true

        Properties props = new Properties();
        FileInputStream in = new FileInputStream(myprop);
        props.load(in);
        in.close();

        System.out.println(props.getProperty("testprop")); // prints crazy
    }
}

现在要疯了:
如果我手动创建相同的文件(crazy.properties with content -> testprop=handmade)
并将其移动到文件夹 C:\Windows 资源管理器能够显示该文件。
该文件似乎可见

现在我重新启动“PropertyRead”-> 它打印的不是“handmade”-> 它打印的是“crazy”

什么鬼???

现在我通过资源管理器删除文件“C:\WINDOWS\crazy.properties”并重新启动 PropertyRead
该文件仍然存在(但不可见)并打印“疯狂”

怎么可能?

提前致谢

没有管理员权限的普通程序不允许写入例如Windows 目录。

出于兼容性原因,写入此类位置的文件最终可能会在某些 windows 版本中特定于您的用户配置文件的“VirtualStore”中。

检查 %UserProfile%\AppData\Local\VirtualStore 如果你的文件在那里。

编辑:可以在此处找到有关 VirtualStore 工作原理的更多信息: https://answers.microsoft.com/en-us/windows/forum/windows_7-windows_programs/please-explain-virtualstore-for-non-experts/d8912f80-b275-48d7-9ff3-9e9878954227