首页 > 编程语言 >咱们一起学 Java(145)

咱们一起学 Java(145)

时间:2025-01-06 12:01:10浏览次数:10  
标签:145 Java 映射 settings 应用程序 Properties setProperty 咱们 属性

咱们一起学 Java(145)

在之前对Java应用程序部署相关知识的学习中,我们已经掌握了JAR文件的创建与使用,以及资源管理和密封机制等重要内容。今天,我们将把重点放在应用程序首选项的存储上,这是提升用户体验的关键环节。用户在使用应用程序时,通常希望能够保存自己的个性化设置和偏好,以便下次启动应用时能够恢复到之前的状态。Java提供了多种方式来实现这一功能,其中属性映射(Property Map)是一种简单而常用的方法。希望通过这篇博客,大家能够学会如何使用属性映射来有效地存储和管理应用程序的首选项,为用户提供更加便捷和个性化的服务。

一、属性映射概述

(一)属性映射的概念与特性

  1. 存储键值对的数据结构
    • 属性映射是一种用于存储键/值对的数据结构,在Java中由Properties类实现。其特性非常适合用于存储应用程序的配置信息。首先,键和值都是字符串类型,这使得配置信息的表示和处理更加直观和统一。例如,我们可以使用字符串“width”作为键,“200”作为值来表示应用程序窗口的宽度。其次,属性映射可以方便地存入文件以及从文件加载,这为保存和恢复应用程序的配置提供了便捷的方式。最后,它还具备一个二级表保存默认值,这在处理用户自定义配置和程序预设配置时非常有用。例如,我们可以为应用程序的某些配置项设置默认值,当用户没有进行自定义设置时,程序可以使用这些默认值,而当用户进行了个性化设置后,程序则使用用户自定义的值。

      (二)属性映射在应用程序中的作用

  2. 保存和恢复程序配置
    • 在应用程序中,属性映射主要用于保存和恢复各种配置选项。比如,我们可以使用属性映射来记录应用程序窗口的位置、大小、标题等信息。当用户关闭应用程序时,将这些信息保存到属性映射中,然后存储到文件里。下次用户启动应用程序时,程序从文件中加载属性映射,读取之前保存的配置信息,并将应用程序恢复到上次关闭时的状态。这样,用户无需重新设置这些常用的配置项,提高了用户体验。例如,一个文本编辑器应用程序可以使用属性映射保存用户上次打开文件的路径、字体大小、编辑窗口的布局等偏好设置,用户再次打开应用程序时,就能直接看到熟悉的编辑环境。

      二、使用属性映射

      (一)创建和设置属性映射

  3. 添加键值对到属性映射
    • 要使用属性映射,首先需要创建一个Properties对象,然后使用setProperty方法添加键值对。例如,Properties settings = new Properties(); settings.setProperty("width", "200"); settings.setProperty("title", "Hello, World!");这段代码创建了一个Properties对象,并添加了两个键值对,分别表示应用程序窗口的宽度为200(单位可能根据具体应用而定)和窗口的标题为“Hello, World!”。我们可以根据应用程序的需求添加各种配置项的键值对,如颜色设置、语言偏好等。

      (二)保存属性映射到文件

  4. 使用store方法存储配置
    • 当我们设置好属性映射中的键值对后,需要将其保存到文件中以便下次使用。可以使用store方法来实现这一操作。例如,OutputStream out = new FileOutputStream("program.properties"); settings.store(out, "Program Properties");,这里首先创建了一个FileOutputStream对象,指定要保存的文件名为“program.properties”,然后调用settings.store方法将属性映射保存到文件中,第二个参数“Program Properties”是一个注释,会被添加到文件头部,用于描述文件的内容。保存后的文件内容类似这样:

      #Program Properties
      #Mon Apr 30 07:22:52 2007
      width=200
      title=Hello, World!
      
    • 其中,以“#”开头的行是注释,后面是键值对的列表,每个键值对占一行,格式为“键=值”。

      (三)从文件加载属性映射

  5. 使用load方法恢复配置
    • 当应用程序再次启动时,需要从文件中加载之前保存的属性映射。使用load方法可以实现这一功能。例如,InputStream in = new FileInputStream("program.properties"); settings.load(in);,这里创建了一个FileInputStream对象,指定要加载的文件为“program.properties”,然后调用settings.load方法从文件中读取属性映射并加载到Properties对象中。加载完成后,程序就可以使用这些属性来恢复应用程序的配置。

      (四)设置默认值

  6. 两种提供默认值的方式
  • 在属性映射中,为配置项提供默认值是一个很好的实践,因为用户可能会手动编辑配置文件,或者在某些情况下配置文件中的值可能丢失或无效。Properties类提供了两种设置默认值的机制。第一种方式是在获取属性值时指定默认值,例如String title = settings.getProperty("title", "Default title");,如果属性映射中存在“title”属性,title将被设置为对应的值;否则,title将被设置为“Default title”。这种方式适用于只需要为个别属性设置默认值的情况。另一种方式是将所有默认值放在一个二级属性映射中,并在主属性映射的构造器中提供这个二级映射。例如:
Properties defaultSettings = new Properties();
defaultSettings.

setProperty("width","300");
defaultSettings.

setProperty("height","200");
defaultSettings.

setProperty("title","Default title");

Properties settings = new Properties(defaultSettings);
  • 在这个例子中,defaultSettings是二级属性映射,包含了多个默认值。当主属性映射settings中不存在某个属性时,就会使用二级映射中的默认值。这种方式更适合为多个属性统一设置默认值的情况。

    (五)代码实例:使用属性映射保存和恢复窗口设置

  1. 创建一个简单的窗口应用程序
  • 以下是一个简单的窗口应用程序示例,演示如何使用属性映射保存和恢复窗口的位置、大小和标题等设置:
import javax.swing.JFrame;
import java.awt.EventQueue;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;

public class WindowSettingsExample {
    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            WindowSettingsFrame frame = new WindowSettingsFrame();
            frame.setVisible(true);
        });
    }
}

class WindowSettingsFrame extends JFrame {
    private static final int DEFAULT_WIDTH = 300;
    private static final int DEFAULT_HEIGHT = 200;
    private File propertiesFile;
    private Properties settings;

    public WindowSettingsFrame() {
// 获取用户主目录并创建配置文件目录
        String userDir = System.getProperty("user.home");
        File propertiesDir = new File(userDir, ".windowSettings");
        if (!propertiesDir.exists()) {
            propertiesDir.mkdir();
        }
        propertiesFile = new File(propertiesDir, "window.properties");
// 设置默认属性值
        Properties defaultSettings = new Properties();
        defaultSettings.setProperty("x", "0");
        defaultSettings.setProperty("y", "0");
        defaultSettings.setProperty("width", String.valueOf(DEFAULT_WIDTH));
        defaultSettings.setProperty("height", String.valueOf(DEFAULT_HEIGHT));
        defaultSettings.setProperty("title", "Window Settings Example");
        settings = new Properties(defaultSettings);
// 从文件加载属性
        try {
            if (propertiesFile.exists()) {
                FileInputStream in = new FileInputStream(propertiesFile);
                settings.load(in);
                in.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
// 设置窗口位置、大小和标题
        int x = Integer.parseInt(settings.getProperty("x"));
        int y = Integer.parseInt(settings.getProperty("y"));
        int width = Integer.parseInt(settings.getProperty("width"));
        int height = Integer.parseInt(settings.getProperty("height"));
        String title = settings.getProperty("title");
        setBounds(x, y, width, height);
        setTitle(title);
// 注册窗口关闭事件,保存属性
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        addWindowListener(new java.awt.event.WindowAdapter() {
            @Override
            public void windowClosing(java.awt.event.WindowEvent windowEvent) {
                try {
                    FileOutputStream out = new FileOutputStream(propertiesFile);
                    settings.setProperty("x", String.valueOf(getX()));
                    settings.setProperty("y", String.valueOf(getY()));
                    settings.setProperty("width", String.valueOf(getWidth()));
                    settings.setProperty("height", String.valueOf(getHeight()));
                    settings.setProperty("title", getTitle());
                    settings.store(out, "Window Settings");
                    out.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}
  • 在这个示例中,首先获取用户主目录,创建一个用于存储配置文件的目录(如果不存在)。然后设置默认的窗口属性值,包括位置、大小和标题。接着尝试从配置文件中加载属性,如果文件存在,就将加载的属性应用到窗口设置上。在窗口关闭事件中,将当前窗口的位置、大小和标题保存到属性映射中,并存储到文件里。这样,下次启动应用程序时,窗口将恢复到上次关闭时的状态。

    三、总结与展望

    通过今天对Java应用程序首选项存储与属性映射的学习,我们掌握了属性映射的概念、特性和使用方法,包括创建和设置属性映射、保存和加载属性映射到文件,以及设置默认值等操作。通过实际的代码示例,我们看到了如何在一个简单的窗口应用程序中应用这些知识来保存和恢复用户的首选项。属性映射是一种简单而有效的存储应用程序配置信息的方式,但在处理复杂的配置时可能会存在一些局限性。在后续的学习中,我们将继续探讨Java应用程序首选项存储的更高级方式,如使用首选项API,以及其他与应用程序部署相关的重要知识,进一步提升我们在Java应用程序开发中的能力。希望大家继续关注我的博客,一起在Java学习的道路上不断进步。
    写作不易,如果您觉得这篇博客对您有帮助,请关注我的博客,点赞、评论支持一下。您的鼓励是我继续分享知识的动力,期待与您一起在Java的世界里探索更多精彩!

标签:145,Java,映射,settings,应用程序,Properties,setProperty,咱们,属性
From: https://blog.csdn.net/wj_rdk/article/details/144960724

相关文章

  • 咱们一起学 Java(144)
    咱们一起学Java(144)在之前对Java应用程序部署中JAR文件的学习里,我们已经了解了如何将应用程序打包成一个方便分发的文件格式。今天,我们将继续深入探讨部署过程中的另外两个重要方面:资源管理和密封。资源管理涉及到如何在应用程序中有效地组织和访问各种数据文件,如图片、文......
  • 咱们一起学 Java(143)
    咱们一起学Java(143)在之前的Java学习旅程中,我们专注于掌握Java语言的特性以及图形编程知识,努力打造功能强大的应用程序。但当应用程序开发完成后,我们面临着一个关键问题:如何将其有效地部署到用户的计算机上?这就引出了我们今天要深入探讨的主题——JAR文件。JAR文件在Java应......
  • 咱们一起学 Java(142)
    咱们一起学Java(142)在之前的学习中,我们已经对Swing程序的调试技巧有了一定的了解,包括查看组件层次结构、使用图形化调试器以及事件跟踪器等。今天,我们将进一步深入实践,结合AWT机器人(Robot)的自动化测试功能,探讨如何更全面、有效地调试和测试Swing程序。通过实际的代码示例和......
  • 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-10- 标签页(tab)操作 - 上篇 (详细教
    1.简介本来按照计划这一系列的文章应该介绍Context和Page两个内容的,但是宏哥看了官方文档和查找资料发现其实和宏哥在Python+Playwright系列文章中的大同小异,差不了多少,再在这一个系列介绍就有点画蛇添足,索性就不介绍和讲解了,有兴趣的自己可以看宏哥之前写的,或者自己查找资料和官......
  • Java Spring Boot监听事件和处理事件
    在JavaSpringBoot中,监听事件和处理事件是构建灵活、可扩展应用程序的重要机制。通过事件驱动模型,可以实现组件之间的解耦,增强系统的可维护性和可测试性。本文将详细介绍如何在SpringBoot中监听和处理事件,包括自定义事件的创建、发布和监听。1.自定义事件首先,我们需要创建一......
  • 关于java实现TLS socket的X509自签名证书的一次记录
    创建客户端和服务器端的证书文件通常涉及几个步骤,包括生成私钥、创建证书签名请求(CSR)、签发证书以及将这些信息打包到PKCS#12格式的文件中。以下是详细的步骤说明:1.安装OpenSSL首先,你需要安装OpenSSL,它是一个开源的SSL/TLS工具包,可以用来生成密钥对和证书。Windows:可以从......
  • dockerfile实现tomcat以及java的war包自动部署.240108
    1.下载jdk和tomcatwgethttps://dlcdn.apache.org/tomcat/tomcat-8/v8.5.93/bin/apache-tomcat-8.5.93.tar.gzwgethttps://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz2.vimDockerfileFROMcentos:latestMAINTAINERAmadeus#nowaddj......
  • 【JavaSE】【网络协议】HTTPS
    目录一、HTTPS简介二、加密与解密三、HTTPS的⼯作过程3.1对称加密3.2非对称加密3.3中间人攻击3.4引⼊证书解决3.4.1数据签名3.4.2引入证书后的工作过程:一、HTTPS简介HTTPS也是⼀个应⽤层协议.是在HTTP协议的基础上引⼊了⼀个加密层.HTTP协议内容都是......
  • Java必备知识点
    37.接口中的方法是抽象的方法,必须没有方法体即花括号(一定记住抽象方法没有方法体)38.39.A是接口,a是A接口的引用变量,将A一个具体实现的类C创建一个对象,赋值给a,a此时可以调用C中重写的A的方法40.图形化用户界面包:通常由awt、swing两种包41.booleanb为true的时候窗口可见,为f......
  • 基于JAVA+SpringBoot+Vue的家政服务平台
    基于JAVA+SpringBoot+Vue的家政服务平台前言✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌......