特殊文件:XML文件,Properties属性文件【详解】

news2025/4/28 6:30:18

目录

1.Properties属性文件

2.特殊文件:XML文件       


1.Properties属性文件

        是一个Map集合(键值对集合),但是我们一般不会当集合使用。

        核心作用:Properties是用来代表属性文件的,通过Properties可以读写属性文件里的内容。

2.使用Properties读取属性文件里的键值对数据

        

3.使用Properties把键值对数据写出到属性文件里去

package com.itheima.day11.teacher.pp;

import java.io.FileReader;
import java.util.Properties;
import java.util.Set;

public class PropertiesDemo {

    /*
    掌握
       使用Properties集合类去读取属性文件中的键值对信息并完成解析。

      .properties结尾的文件 叫 属性文件 也叫配置文件。
        里面存储数据的特点
           1:键值对形式
           2: 键不重复
           3: 文件后缀名是.properties
        文件在开发中是来存储   配置信息的。比如 连接数据库的用户名密码等...

       在开发中是怎么去读取这种文件呢?
          因为键值对的 所以Java提供了一个类型 Properties去专门去完成这类文件信息的存储(读取)
          Properties是Map的集合一个子类。
            特殊的子类---里面设定了  一个 读取  和  写出  properties文件的功能
     */
    public static void main(String[] args) throws Exception{
           //1:创建Properties对象 (键值对)
        Properties pp  = new Properties();
        System.out.println(pp);
        // 2: 使用load(输入流)功能,可以将流关联的文件中的 属性集信息 读取到 Properties中
        pp.load(new FileReader("day11\\src\\user.properties"));
        System.out.println(pp);


        //3:数据都读取到 pp集合中
        //获取键集
        //Set<Object> objects = pp.keySet();//使用父亲的方法 键的泛型是 Object
        Set<String> keys = pp.stringPropertyNames();//获取 键值对中所有的键  属性集中 属性的名字
        for (String key : keys) {
            //key 所有的键--- 属性的名字
            //    键对应的值  属性的值
//            Object o = pp.get(key);//使用父亲的方法 得到键是Object
           //  优化了一个方法
            String value = pp.getProperty(key);
            System.out.println(key+":"+value);
        }
        System.out.println("========================foreach遍历======");
        pp.forEach((k,v)-> System.out.println(k+":"+v));
    }
}


-------------------
package com.itheima.day11.teacher.pp;

import java.io.FileWriter;
import java.util.Properties;

public class PropertiesDemo02 {
    /*
     目标
       掌握使用Properties 将集合数据写到一个 属性集文件中。

     */
    public static void main(String[] args) throws Exception{
        //1:创建Properties对象  存储一些键值对数据。
        Properties pp = new Properties();
        // 可以使用父亲方法  可以用 但是不够精准
//        pp.put("",new Object());
        // 存都是字符串  自己 优化了方法  pp.setProperty(字符串键,字符串值)设置属性集
        pp.setProperty("李亚雷","张冠电");
        pp.setProperty("郭家琪","盆国歪");
        pp.setProperty("王振魁","卒衰瘦");
        //2:调用 store()功能 将集合数据写到指定文件中.
        pp.store(new FileWriter("day11\\src\\user2.properties"),"说明最好用英文 this is fanyici");

    }
}

2.特殊文件:XML文件       

        XML( 全称eXtensible Markup Language, 可扩展标记语言 )

        本质是一种数据的格式,可以用来存储复杂的数据结构和数据关系。

        1.XML的特点:

                1.XML中的“<标签名>” 称为一个标签或一个元素,一般是成对出现的。

                2.XML中的标签名可以自己定义(可扩展),但必须要正确的嵌套。

                3.XML中只能有一个根标签。

                4.XML中的标签可以有属性。

                5.如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后缀一般要写成.xml。

        2.XML的语法规则  

        

3.XML的作用和应用场景

        本质是一种数据格式,可以存储复杂的数据结构和数据关系。

        应用场景:经常用来做为系统的配置文件;或者作为一种特殊的数据结构,在网络中进行传输。

4.读取XML文件中的数据:使用Dom4J解析出XML文件

        1.核心思想:文档对象模型

    2.使用步骤

                1.下载Dom4j框架,官网下载,官网地址: https://dom4j.github.io/

                2.在项目中创建一个文件夹:lib

                3.将dom4j-2.1.3.jar文件复制到 lib 文件夹

                4.在jar文件上点右键,选择 Add as Library -> 点击OK

                5.在类中导包使用

   3.得到Document对象和根元素对象

4.Element提供的方法

        

package com.itheima.day11.teacher.parsexml;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

public class Demo {
    /*
      学习如何使用DOM4J技术解析xml文件


          以后我们如果用别的依赖jar包,就遵循别人提供的方式去玩 DOM4J!


     */
    public static void main(String[] args) throws Exception{
       /*
         如何获取根元素
           1:创建DOM4J 核心读取对象 SAXReader()
           2:调用 read(被解析xml文件位置)方法 得到文档对象(一棵树)
           3:文档调用 getRootElement方法得到 根元素
           元素类型 Element
        */
        //1:创建DOM4J 核心读取对象 SAXReader()
        SAXReader saxReader = new SAXReader();
        //2:调用 read(被解析xml文件位置)方法 得到文档对象(一棵树)
        Document document = saxReader.read("day11\\src\\helloworld.xml");
        // document 树
        //3:文档调用 getRootElement方法得到 根元素
        Element rootElement = document.getRootElement();
        System.out.println(rootElement);
        System.out.println(rootElement.getName());
        /*
          Element方法学习
             getName() 获取当前元素的名字
             List<Element> elements() 获取当前元素(标签)的所有子元素
             List<Element> elements(String childName) 获取当前元素(标签)的指定名称的子元素

         */
        // 4:获取 根元素下所有的子元素标签
//        List<Element> elements = rootElement.elements();//elements 根元素下的所有的子元素
        List<Element> elements = rootElement.elements("user");//elements 根元素下的所有的子元素
        System.out.println(elements.size());
        // 循环得到 每一个子元素标签
        for (Element element : elements) {
            System.out.println(element.getName());
        }

        System.out.println("======================");
        //根据名字  获取 people标签
        Element peopleE = rootElement.element("people");
        System.out.println("元素名字:"+peopleE.getName());
        //获取标签文本信息
        System.out.println("people元素的文本信息:"+peopleE.getText());

        // 根据名字  获取 user标签 如果获取单个 是第一个
        Element userE = rootElement.element("user");
        //  attributeValue(属性名)
        System.out.println("userE属性id:"+userE.attributeValue("id"));
        System.out.println("userE属性desc:"+userE.attributeValue("desc"));
        // 请解析出  userE 中 子标签的 的文本信息
//          userE.element("name").getText()
               //获取 userE 的name标签 的 文本信息
        // 获取指定子标签的文本信息
        System.out.println(userE.elementText("name"));
        System.out.println(userE.elementText("sex"));
        System.out.println(userE.elementText("地址"));
        System.out.println(userE.elementText("password"));
        System.out.println(userE.elementText("data"));
        System.out.println(userE.elementText("data1"));


    }
}

5.补充知识:约束XML文件的编写[了解]

        什么是XML文件的约束?

                就是限制XML文件只能按照某种格式进行书写。

        约束文档的分类

                DTD文档

                Schema文档

        1.DTD约束

students:根标签

student+:子标签,+是多个

最后一行name:student的属性名

2.Schema

        required:必填

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1470826.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】学习和总结联合查询

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-OPj5g6evbkm5ol0U {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

FPGA 与 数字电路的关系 - 这篇文章 将 持续 更新 :)

先说几个逻辑&#xff1a;&#xff08;强调一下在这篇文章 输入路数 只有 1个或2个&#xff0c;输出只有1个&#xff0c;N个输入M个输出以后再说&#xff09; 看下面的几个图&#xff1a; 图一&#xff08; 忘了 这是 啥门&#xff0c;不是门吧 &#xff1a;&#xff09;也就…

UE5 C++ TPS开发 学习记录(五)

这节课创建了新的游戏关卡Lobby,制作了属于自己的游戏名字"Match Type",制作了加入游戏会话的委托和函数,最后可以用IP就可以把客户端链接到服务端 .h // Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #incl…

pytest如何在类的方法之间共享变量?

在pytest中&#xff0c;setup_class是一个特殊的方法&#xff0c;它用于在类级别的测试开始之前设置一些初始化的状态。这个方法会在类中的任何测试方法执行之前只运行一次。 当你在setup_class中使用self来修改类属性时&#xff0c;你实际上是在修改类的一个实例属性。在Pyth…

高频面试题整理(二)

文章目录 索引相关问题优化你的索引 密集索引和稀疏索引如何定位并优化慢查询sqlMyISAM与InnoDB 关于锁方面的区别是什么&#xff1f;MyISAMInnoDB事务隔离级别 多线程并发的相关问题Thread中的start和run方法的区别Thread和Runnable是什么关系&#xff1f;如何处理线程的返回值…

【Java程序设计】【C00307】基于Springboot的基Hadoop的物品租赁管理系统(有论文)

基于Springboot的基Hadoop的物品租赁管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的基于 Hadoop的物品租赁系统的设计与实现&#xff0c;本系统有管理员、用户二种角色权限&#xff1b; 前台首页&#…

Xcode与Swift开发小记

引子 鉴于React Native目前版本在iOS上开发遇到诸多问题&#xff0c;本以为搞RN只需理会Javascript开发&#xff0c;没想到冒出CocoaPod的一堆编译问题。所以横下一条心&#xff0c;决定直接进攻iOS本身。不管你是用React Native&#xff0c;还是用Flutter&#xff0c;iOS下的…

记录一些mac电脑重装mysql和pgsql的坑

为什么要重装,是想在mac电脑 创建data目录…同事误操作,导致电脑重启不了.然后重装系统后,.就连不上数据库了.mysql和pgsql两个都连不上.网上也查了很多资料.实在不行,.就重装了… 重装mysql. 1.官网下载 https://www.mysql.com/downloads/ 滑到最下面 选择 选择对应的芯片版本…

python-产品篇-游戏-开心消消乐

文章目录 准备代码效果 准备 安装对应环境库 代码 import pygame import random from pygame.locals import *class SoundPlay:game_bgm "sound/GameSceneBGM.ogg"world_bgm sound/WorldSceneBGM.oggeliminate (sound/eliminate1.ogg, sound/eliminate2.ogg, s…

MATLAB环境下基于洗牌复杂演化的图像分割算法

智能优化算法因其较强的搜索解能力而得到了大量的应用&#xff0c;在这些计算智能算法中&#xff0c;群体智能优化算法因其高效性、有效性以及健壮性等优点而得到了科研人员的青睐。这类算法借鉴生物群体的合作特性&#xff0c;主要解决大规模复杂的分布式问题&#xff0c;研究…

YOLO算法改进Backbone系列之:EfficientViT

EfficientViT: Memory Effificient Vision Transformer with Cascaded Group Attention 摘要&#xff1a;视觉transformer由于其高模型能力而取得了巨大的成功。然而&#xff0c;它们卓越的性能伴随着沉重的计算成本&#xff0c;这使得它们不适合实时应用。在这篇论文中&#x…

深入理解 JavaScript 中的绑定机制(上)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Orange3数据预处理(列选择组件)数据角色及类型描述

在Orange3的文件组件中&#xff0c;datetime、categorical、numeric以及text代表不同种类的数据类型&#xff0c;具体如下&#xff1a; datetime&#xff1a;代表日期和时间类型的数据。通常用于时间序列分析、生存分析和其他需要考虑时间因素的机器学习任务中。例如&#xff0…

k8s-kubeapps部署 20

部署kubeapps应用&#xff0c;为Helm提供web UI界面管理&#xff1a; 下载最新版本的kubeapps并修改其values.yaml文件 下载并拉取所需镜像&#xff1a; 部署应用 添加解析 修改svc暴露方式为LoadBalancer 得到分配地址 访问http://192.168.182.102 授权并获取token 1.24前的…

密码学及其应用(应用篇15)——0/1背包问题

1 问题背景 背包问题是一个经典的优化问题&#xff0c;在计算机科学和运筹学中有着广泛的应用。具体到你提到的这个问题&#xff0c;它是背包问题中的一个特例&#xff0c;通常被称为0/1背包问题。这里&#xff0c;我们有一系列的正整数 &#xff0c;以及一个正整数&#xff0c…

TCP/IP协议栈:模拟器实现基本的L2和L3功能

在C中实现的TCPI/IP网络堆栈模拟器。该模拟器实现基本的第2层&#xff08;MAC地址&#xff0c;Arp&#xff09;和第3层&#xff08;路由&#xff0c;IP&#xff09;功能。 TCP/IP协议栈是一个网络通信的基础架构&#xff0c;包含了多层次的协议和功能。在模拟实现基本的L2和L3…

LabVIEW和Python开发微细车削控制系统

LabVIEW和Python开发微细车削控制系统 为满足现代精密加工的需求&#xff0c;开发了一套基于LabVIEW和Python的微细车削控制系统。该系统通过模块化设计&#xff0c;实现了高精度的加工控制和G代码的自动生成&#xff0c;有效提高了微细车削加工的自动化水平和编程效率。 项目…

【JavaEE】 spring boot的配置文件详解

spring boot的配置文件详解 文章目录 spring boot的配置文件详解常用配置spring boot的配置文件1. properties 文件2. YAML 文件3. 多环境配置4. 配置文件优先级5. 配置属性注入特殊说明 properties配置文件基本语法 例子peoperties文件的缺点 YML配置文件YML使用yml 配置不同数…

【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)

一、Qt Designer简介 Qt Designer是PyQt程序UI界面的实现工具&#xff0c;可以帮助我们快速开发 PyQt 程序的速度。它生成的 UI 界面是一个后缀为 .ui 的文件&#xff0c;可以通过 pyiuc 转换为 .py 文件。 Qt Designer工具使用简单&#xff0c;可以通过拖拽和点击完成复杂界面…

mini-spring|向虚拟机注册钩子,实现Bean对象的初始化和销毁方法

目标 当我们的类创建的 Bean 对象&#xff0c;交给 Spring 容器管理以后&#xff0c;这个类对象就可以被赋予更多的使用能力。我们还希望可以在 Bean 初始化过程&#xff0c;执行一些操作。比如帮我们做一些数据的加载执行&#xff0c;链接注册中心暴漏RPC接口以及在Web程序关…