【问题标题】:Java properties file is saved in system32 folderJava 属性文件保存在 system32 文件夹中
【发布时间】:2015-10-07 21:14:49
【问题描述】:

所以,我有一个方法可以将一些数据保存在属性文件中,但发生了一些奇怪的事情。看,假设我在桌面上有 JAR 文件。如果我直接从那里打开它(双击等),属性文件应该保存在桌面中。但是,如果您将 JAR 拖到 Windows 启动列表并从那里打开它,属性文件将保存在 System32 文件夹中。

方法如下:

private void saveAncientsData() {
        Properties prop = new Properties();
        OutputStream output = null;

        try {

            output = new FileOutputStream("ancients.data");
            File file = new File("ancients.data");
            // set the properties value
            for (int x = 0; x < currentLvlSpinnerFields.size(); x++) {
                prop.setProperty(ancientNames[x], currentLvlSpinnerFields.get(ancientNames[x]).getValue().toString());
            }

            // save properties to project root folder
            prop.store(output, null);
            JOptionPane.showMessageDialog(this, "Data successfully saved in \n\n" + file.getCanonicalPath(), "Saved", JOptionPane.INFORMATION_MESSAGE);
        } catch (IOException io) {
            io.printStackTrace();
        } finally {
            if (output != null) {
                try {
                    output.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

感谢任何帮助,因为我一无所知。

提前致谢!

【问题讨论】:

  • @FastSnail 将 SHORTCUT 拖到开始列表时实际上可以正常工作。拖动 JAR 文件时为什么会出现“问题”?
  • 添加程序到开始列表时是否要在桌面创建属性文件?
  • "属性文件保存在桌面,应该如此。" * 我不确定这是一个正确的假设。您的代码指定了没有任何路径信息的目标文件名。那么为什么你认为它应该与jar文件保存到同一目录中呢?你能指出 java 文档说会是这种情况吗?
  • @Moko 你的属性文件应该在你的 jar 文件存在的地方创建。如果你创建快捷方式,你的实际文件存在于桌面。所以属性文件将在桌面中创建。你能告诉你如何将它拖到windows 启动列表?你把它拖到了哪个文件夹?
  • @EJK 好吧,我说“应该如此”,因为它应该与 JAR 保存在同一位置,并且 JAR 在桌面中。抱歉,我的意思不是听起来“令人困惑”。

标签: java outputstream fileoutputstream properties-file


【解决方案1】:

根据您的代码,您没有提供要在桌面中创建的属性文件的路径。

output = new FileOutputStream("ancients.data");

所以您的属性文件将在您的 jar 文件所在的同一目录中创建。

但是,如果您从父进程运行此 .jar 文件,则您的 jar 文件会在该父进程所在的目录中创建。

我猜当 Windows 启动时,win32 目录中存在特定进程执行启动程序。我认为它是 userinit.exe 。所以你的 prop 文件将在System32 目录中创建。

如果你想在桌面上创建属性文件,你可以把你的 jar 文件放在桌面上,然后在 .jar 中添加一个shortcut,或者你可以给你的桌面提供完整路径,比如

output = new FileOutputStream(System.getProperty("user.home") + "/Desktop/"+"ancients.data");

编辑

理解这个问题

1)在桌面创建一个名为example的文件夹。然后创建2个文件夹path1path2。然后将.jar添加到path1文件夹

2)双击path1中的jar,会在path1中创建一个属性文件,如你所料。

3)path2 中删除属性文件。打开命令提示符。在 path1 中运行 Prop.jar 文件。输入call "pathtodesktop/example/path1/Prop.jar"回车。

.property 文件将在 path2 而不是 path1 中创建,这就是您的情况。

【讨论】:

  • 我要试试,谢谢!另外,有没有办法获取 JAR 目录?所以我可以将它保存在 JAR 所在的任何位置而不是桌面。
  • @Moko 是的,你可以得到“从哪里执行 jar 文件”。看看这个问题 http://stackoverflow.com/questions/4871051/getting-the-current-working-directory-in-java 但是当你的 jar 文件被其他程序执行时,你会得到父进程路径而不是实际路径。你可以试试。我会给你这个问题的小例子
  • 有趣。所以,如果我做对了,当我从开始列表运行 JAR 时(首先将 JAR 拖到那里),它作为 Windows 的“子进程”运行,从而在 system32 中创建文件?
  • @Mokoi 认为你的 .jar 文件是由userinit.exe 执行的。它存在于system32
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
  • 2015-06-19
相关资源
最近更新 更多