如何保存上次会话的变量值(程序退出)

如何保存上次会话的变量值(程序退出)

问题描述:

如何在程序中保存变量的值,然后在下次程序运行时重新使用它?我不想用文件写入/读取来完成它。如何保存上次会话的变量值(程序退出)

+5

“*我不想用文件写入/读取*”我们可以知道原因吗?你的问题看起来像[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – Pshemo 2015-02-05 16:57:54

+0

'不想用文件写入/读取'使用数据库?但你为什么要这样做? – 2015-02-05 16:58:11

+0

相关:[保持Python脚本运行之间的内存中的持久变量](http://stackoverflow.com/questions/6687660/keep-persistent-variables-in-memory-between-runs-of-python-script) – Christian 2015-02-05 16:58:32

使用Java Preferences API

import java.util.prefs.*; 

public class Example { 
    // Preference key 
    private static final String FRUIT = "fruit"; 

    public void savePreference(String favoriteFruit) { 
     Preferences prefs = Preferences.userNodeForPackage(Example.class); 

     prefs.put(FRUIT, favoriteFruit); 
    } 

    public String readPreference() { 
     Preferences prefs = Preferences.userNodeForPackage(Example.class); 

     return prefs.get(FRUIT, "default"); 
    } 
} 

数据是基于您的类的完全限定名称存储的,因此您的包名和类名是相关的。从documentation for the Preferences class

此类允许应用程序存储和检索用户和系统首选项和配置数据。这些数据永久存储在一个依赖于实现的后台存储中。典型的实现包括平面文件,特定于操作系统的注册表,目录服务器和SQL数据库。这个类的用户不需要关心后备存储的细节。

您可以使用内存中的键值存储(如Redis)或内存数据库(如H2)。但是这可能会根据您的需要矫枉过正。

+0

有趣的想法,但是当我们重新启动我们的机器时它也会工作(只是问,因为我从来没有使用这些工具,这种情况似乎相当重要)? – Pshemo 2015-02-05 17:07:15

+0

内存数据库如何在重新启动后存活? – 2015-02-05 17:09:54

+0

@Pshemo它不会,因为您只是将它写入内存,并且在重启机器时内存将被擦除。但是,您可以将Redis托管在不重新启动并写入该服务器的其他服务器上。 – 2015-02-05 17:10:47

可以使用java.util.prefs.Preferences存储设置。对于两个目标组:通常是用户设置,不太经常使用应用程序/系统设置。他们可以使用平台设置,就像在Windows下一样。

然而,也有可能将设置存储为XML,这是一种更简洁的方式,因为它不会触及可能受保护的Windows注册表。然后,一个惯用的位置将位于目录System.getProperty("user.home")下的“.myapp”目录中。