java读写properties文件和xml文件,解决中文乱码问题

news2025/1/16 4:57:32

文章目录

  • 前言
  • 一、properties文件
    • 1.1properties格式介绍
    • 1.2读取项目resource/templates下面properties并处理中文乱码问题
    • 1.3读取本地properties并处理中文乱码问题
    • 1.4修改properties文件
  • 二、XML文件
    • 2.1xml文件格式
    • 2.2读取xml文件
    • 2.3写xml文件


前言

在开发当中我们经常需要用到配置文件,我们可以在配置文件中很方便的设置需要进行修改和配置的参数值,有时候我们本地开发和生产环境中有些参数也不一样,比如数据库IP和账号密码等、要读取的文件夹路径、日志备份的时间和周期等等,有些人可能会说直接将这些值定义为final变量不久可以了吗?这样的缺点是我们将项目部署到生产环境中时还要重新调整Java代码,然后重新生成jar包或者war包,而定义到配置文件中可以直接打开jar进行修改,我们在配置文件中设置这些参数就很方便后续进行修改。
在java中常用的配置文件有properties、xml和txt,本文就来介绍一下这三种配置文件的读写方法。


一、properties文件

1.1properties格式介绍

properties文件是一个文本文件,以“键=值”的方式书写一个属性的配置信息。
在这里插入图片描述
从上面的类结构图可以看出,它继承了Hashtable并实现了Map接口
properties的属性配置键值前后的空格在解析时候会被忽略。
注 释:前面加上#号
在这里插入图片描述

1.2读取项目resource/templates下面properties并处理中文乱码问题

读取properties文件,需要注意的是如果读取出的值含有中文的话会出现乱码的问题,需要再进行处理。
在这里插入图片描述
该properties文件放在项目resource/templates下面
代码如下:

    //读取properties资源文件
    public static String getProperties() {
        Properties properties = new Properties();
        try {
            InputStream resourceAsStream = SysSetParaEditController.class.getClassLoader().getResourceAsStream("getGKCX.properties");
            properties.load(resourceAsStream);
            String head = properties.getProperty("head");
            String content = properties.getProperty("content");
            String body = properties.getProperty("body");
            String function = properties.getProperty("function");
            String arg = properties.getProperty("arg");
            String functionend = properties.getProperty("functionend");
            String bodyend = properties.getProperty("bodyend");
            String contentend = properties.getProperty("contentend");
            System.out.println(head + "-->" + head);
            System.out.println(content + "-->" + content);
            System.out.println(body + "-->" + body);
            System.out.println(function + "-->" + function);
            System.out.println(arg + "-->" + arg);
            System.out.println(functionend + "-->" + functionend);
            System.out.println(bodyend + "-->" + bodyend);
            System.out.println(contentend + "-->" + contentend);
            resourceAsStream.close(); //关闭流
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        //处理中文乱码
        String imgFolder = properties.getProperty("imgFolder");
        try {
            imgFolder = new String(imgFolder.getBytes("ISO-8859-1"), "GBK"); // 处理中文乱码
        }
        catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        System.out.println(imgFolder);
        return imgFolder;
    }

1.3读取本地properties并处理中文乱码问题

如果properties文件在本地的话,可以这样进行读取:
代码如下:

    //读取properties资源文件
    public static String getProperties() {
         Properties pro = new Properties();
        int maxTotal = 0;
        int maxIdel = 0;
        String host = null;
        int port = 0;
        try {
            pro.load(new FileReader("D:\\sun\\getGKCX.properties"));
            String imgFolder = properties.getProperty("imgFolder");
            imgFolder = new String(imgFolder.getBytes("ISO-8859-1"), "GBK"); // 处理中文乱码
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(imgFolder);
        return imgFolder;
    }

1.4修改properties文件

    public static void writePropertiesFile(String filename)
    {
        Properties properties = new Properties();
        try{
        	//方法一:使用FileWriter 
            properties.setProperty("imgFolder", "D:\\sun");
            //创建字节输出流/字符输出流,构造方法中绑定要输出的目的地
            FileWriter fw=new FileWriter("D://a.txt");
            //使用Properties集合中的方法store,把集合中的临时数据,持久写入到硬盘中
            properties.store(fw, "save data");
            //释放资源
            fw.close();
            
            //方法二:使用OutputStream 
            OutputStream outputStream = new FileOutputStream(filename);
            properties.setProperty("imgFolder", "D:\\sun\\img");
            properties.store(outputStream, "author: sun");
            outputStream.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

二、XML文件

2.1xml文件格式

ML 指可扩展标记语言(EXtensible Markup Language),是一种标记语言,很类似 HTML。
在XML中,你可以拓展发明自己的标签,XML没有预定义的标签,XML允许创作者定义或设计自己的标签和文档结构
基本结构:
XML文档的后缀名 .xml
XML的第一行必须定义文档声明
在项目中经常见到的xml文件那就是pom.xml,相信大家对这个一定都不陌生吧!
还有mybatis使用的mybatis.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--<environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1/table?useUnicode=true&amp;characterEncoding=utf-8&amp;allowMultiQueries=true&amp;useSSL=false&amp;severTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>-->
    <mappers>
         <mapper resource="com/sun/server/mapper/xml/TScdLogMapper.xml"/>
         <mapper resource="com/sun/server/mapper/xml/TScdOperateMapper.xml"/>
         <mapper resource="com/sun/server/mapper/xml/TScdOperatePartsMapper.xml"/>
         <mapper resource="com/sun/server/mapper/xml/TSysParainfoMapper.xml"/>
    </mappers>
</configuration>

2.2读取xml文件

代码如下(示例):

public static void readPropertiesFileFromXML(String filename)
    {
        Properties properties = new Properties();
        try
        {
            InputStream inputStream = new FileInputStream(filename);
            properties.loadFromXML(inputStream);
            inputStream.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        String imgFolder = properties.getProperty("imgFolder");; //XML中的中文不用处理乱码,正常显示
    }

2.3写xml文件

代码如下(示例):

//写资源文件到XML文件,含中文  
    public static void writePropertiesFileToXML(String filename)
    {
        Properties properties = new Properties();
        try
        {
            OutputStream outputStream = new FileOutputStream(filename);
            properties.setProperty("imgFolder", "D:\\sun\\img");
            properties.storeToXML(outputStream, "author: sun");
            outputStream.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

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

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

相关文章

【NX】NX二次开发中拉伸曲线完整范例

之前做项目测试用到的代码&#xff0c;开发的版本是NX8.5的32位版本&#xff0c;这个代码实现起来也不难&#xff0c;其实就是调用了UG的API而已。 那么我在这里提供完整的代码&#xff1a; //author&#xff1a;autumoon //邮箱&#xff1a;9506163.com //日期&#xff1a;20…

spring AOP学习

概念 面向切面编程横向扩展动态代理 相关术语 动态代理 spring在运行期&#xff0c;生成动态代理对象&#xff0c;不需要特殊的编译器 Spring AOP的底层就是通过JDK动态代理或者CGLIb动态代理技术为目标Bean执行横向织入 目标对象实现了接口&#xff0c;spring使用JDK的ja…

利用微软Bing AI语言大模型辅助提高写代码、阅读代码、解bug的效率

目录 1 怎么才能使用Bing AI 2 Bing AI使用举例 2.1 代码没看懂&#xff0c;可以问Bing AI 2.2 当你不确定你程序理解的是否正确时&#xff0c;可以问Bing AI 2.3 程序编译出现bug&#xff0c;可以问Bing AI 1 怎么才能使用Bing AI 要想使用Bing AI&#xff0c;必须用微软…

【学会动态规划】剑指 Offer II 091. 粉刷房子(14)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

arm交叉编译lmbench

一、下载lmbench www.bitmover.com/lmbench 官网下载&#xff0c;http://www.bitmover.com/lmbench/lmbench3.tar.gz 我没有下载下来&#xff0c;找的别人的百度云下载 链接: https://pan.baidu.com/s/1tGo1clCqY-jQPN8G1eWSsg 提取码: f6jd 二、修改makefile 修改三个文件…

CrossOver2023虚拟机下载及如何安装软件教程

在当今数字化时代&#xff0c;虚拟机技术被广泛应用于软件开发、系统测试、网络安全等领域。虚拟机提供了一个隔离的虚拟环境&#xff0c;使得我们能够在一台物理计算机上同时运行多个操作系统和应用程序。下面我们就来看虚拟机软件怎么安装&#xff0c;虚拟机怎么使用吧&#…

浅析:单板静态数据分析功能在足底压力步态测量分析系统的应用

时代在不断进步&#xff0c;健康成为了现代人最重要的追求之一。而在我们繁忙的生活中&#xff0c;您是否关注过自己的足部健康&#xff1f;它不仅影响着我们的行走姿态、脊椎健康&#xff0c;还影响着我们的整体健康状态。 足底压力测量分析系统A30是一项采集人体足底压力的装…

【并发专题】单例模式的线程安全(进阶理解篇)

目录 背景前置知识类加载运行全过程 单例模式的实现方式一、饿汉式基本介绍源码分析 二、懒汉式基本介绍源码分析改进 三、懒汉式单例终极解决方案&#xff08;静态内部类&#xff09;&#xff08;推荐使用方案&#xff09;基本介绍源码分析 感谢 背景 最近学习了JVM之后&…

【HMS Core】位置服务逆地理编码请求错误问题

【关键字】 HMS、位置服务、逆地理编码 【问题描述】 有开发者反馈在集成位置服务-逆地理编码时&#xff0c;出现了请求报错的问题。 后端请求逆地理编码 错误 { "returnCode": "010010", "returnDesc": "INVALID_REQUEST" } 【问…

【雕爷学编程】Arduino动手做(181)---Maixduino AI开发板9

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

rest-apiV2.0.0升级为simplest-api开源框架生态之simplest-jpa发布

什么是 simplest simplest 追求存粹简单和极致。 旨在为项目快速开发提供一系列的基础能力&#xff0c;方便用户根据项目需求快速进行功能拓展 不在去关心一些繁琐。重复工作&#xff0c;而是把重点聚焦到业务。 前言 程序 10 年。作为一个多年程序。深知每个项目和程序&a…

最令跨境电商信服的六个电子商务营销策略

自从人们开始适应“新常态”以来&#xff0c;电子商务销售额一直在快速增长。进入智能手机和平板电脑时代&#xff0c;在线购物有望成为未来几年每个品牌的关键增长引擎。 数字零售格局的持续转型&#xff0c;您不得不考虑放弃一些利润较低的实体店&#xff0c;并进军电子商务&…

为什么说数字时代的品牌就是体验?

​ 在数字时代&#xff0c;品牌通常被称为“体验”&#xff0c;因为消费者现在以比以往更加动态和身临其境的方式与品牌互动。传统上&#xff0c;品牌主要侧重于创建独特的视觉形象并通过广告和其他营销渠道传达一致的信息。尽管这些方面仍然很重要&#xff0c;但数字环境已经…

应用案例|基于高精度3D视觉引导压缩机抓取定位应用

Part.1 行业现状 3D机器视觉是一种新兴的人工智能技术&#xff0c;它在机器视觉和机器学习领域中发挥着重要的作用。在工业领域&#xff0c;3D视觉技术被广泛应用于引导工业机器人进行抓取和定位操作。使用显扬科技的技术可以实现识别和定位压缩机。 Part.2 如何识别和定位压缩…

appium自动爬取数据

爬取类容&#xff1a;推荐知识点中所有的题目 爬取方式&#xff1a;appium模拟操作获取前端数据 入门级简单实现&#xff0c;针对题目和答案是文字内容的没有提取出来 适用场景;数据不多&#xff0c;参数加密&#xff0c;反爬严格等场景 from appium import webdriver impor…

小程序开发:开发框架与工具的使用指南

引言 本文以微信小程序为例介绍了小程序开发框架与工具的使用&#xff0c;通过本文的阅读&#xff0c;相信大家能够简单了解小程序开发的基本流程和常用工具&#xff0c;从而快速上手小程序开发。 文章目录 引言一、小程序开发框架与工具简介1.1 小程序开发框架1.2 小程序开发工…

百度文心大模型,彻底火了!丨IDCF

IDC报告显示&#xff0c;百度稳居中国深度学习平台市场综合份额第一。 根据中国信通院发布的《深度学习平台报告(2022)》&#xff0c;飞桨是中国深度学习市场应用规模第一的深度学习框架和赋能平台。通过飞桨与文心协同优化&#xff0c;文心大模型3.5&#xff0c;在14个参评模…

CSS 滚动条

一、滚动条样式属性 ::-webkit-scrollbar {width: 6px; /* 竖向滚动条宽度 */height: 6px; /* 横向滚动条高度 */ }::-webkit-scrollbar-thumb {border-radius: 10px; /* 滚动条样式 */-webkit-box-shadow: inset 0 0 3px red; /* 内阴影 */background-color: blue; /* 滚动条…

SpringBoot使用RestTemplate发送http请求(实操版)

前言 查看此文章前强烈建议先看这篇文章&#xff1a;Java江湖路 | 专栏目录 该文章纪录的是SpringBoot使用RestTemplate发送http请求&#xff0c;每一步都有记录&#xff0c;争取每一位看该文章的小伙伴都能操作成功。达到自己想要的效果~ 文章目录 前言1、SpringBoot调用外部…

RabbitMQ(二)

二、高级特性、应用问题以及集群搭建 高级特性 1.消息的可靠性投递 在使用RabbitMQ的时候&#xff0c;作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。 rabbitMQ整个消息投递的路径为&#xff1a; produ…