Stu*_*urm 5 java swing storage
在Java中,我需要找到一种在本地存储一些数据的方法,以便在重新启动之间可用.简单的事情,例如窗口位置/大小.我知道这些信息通常存储在C:\Users\<username>\AppDataWindows上(通过%APPDATA%在Windows资源管理器的地址栏中输入来访问),但我不知道它存储在Mac OS X上的哪个位置.(作为旁注,我仍然不明白该结构%APPDATA%在Windows文件夹,其\Roaming,\Local,\LocalLow,等子文件夹.)
当然,根据操作系统,有一些方法可以将窗口位置等信息存储在这些区域中.也许甚至有一个图书馆已经预先建成用于完成这些相对无处不在的任务?
在 Java 中,我需要找到一种方法在本地存储一些数据,以便在重新启动之间可用。简单的事情,例如窗口位置/大小。
我认为Preferences API适合这个需求。简而言之:
应用程序需要偏好和配置数据来适应不同用户和环境的需求。该
java.util.prefs包为应用程序提供了一种存储和检索用户和系统首选项以及配置数据的方法。数据持久存储在依赖于实现的后备存储中。有两棵独立的首选项节点树,一棵用于用户首选项,一棵用于系统首选项。
这里有一个简短但有用的教程。这是根据您的要求的一个小例子:
import java.util.prefs.Preferences;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class SwingPreferencesTest {
    private void createAndShowGUI() {
        JTextField dummyTextField = new JTextField(20);
        JFrame frame = new JFrame("Demo");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(dummyTextField);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
        Preferences prefs = Preferences.userRoot().node(this.getClass().getName());
        // Define default values here
        System.out.println("width: " + prefs.getDouble("width", 100d));
        System.out.println("height: " + prefs.getDouble("height", 100d));
        System.out.println("x: " + prefs.getDouble("x", 0d));
        System.out.println("y: " + prefs.getDouble("y", 0d));
        // Set new values here
        prefs.putDouble("width", frame.getPreferredSize().getWidth());
        prefs.putDouble("height", frame.getPreferredSize().getHeight());
        prefs.putDouble("x", frame.getLocationOnScreen().getX());
        prefs.putDouble("y", frame.getLocationOnScreen().getY());
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new SwingPreferencesTest().createAndShowGUI();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)
如果您第一次运行它,您将在控制台中看到首选项默认值:
width: 100.0
height: 100.0
x: 0.0
y: 0.0
Run Code Online (Sandbox Code Playgroud)
如果再次运行它,这些值就会更新。就我而言:
width: 240.0
height: 59.0
x: 130.0
y: 130.0
Run Code Online (Sandbox Code Playgroud)
根据下面的 @Puce 评论,在 Windows 上,数据存储在注册表中,这是有道理的,因为这是 Windows 用来存储用户/系统/软件数据的方式。您可以在下面的示例中找到生成的注册表项,HKEY_CURRENT_USER\JavaSoft\Prefs\[package\class name]如下图所示:

注意:在 Windows 8 x64、JDK 1.7 上测试
如果您不想使用这些首选项填充注册表,那么您可以只存储应用程序文件夹的路径(就像其他应用程序一样),并使用此路径从普通属性文件加载配置数据。继续使用首选项(至少存储应用程序的路径)的主要优点是检索/存储配置数据的机制被设计为跨平台的,并且 JVM 实现者(而不是开发人员)必须处理实际的实现。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           89 次  |  
        
|   最近记录:  |