Java的(.properties后缀)的配置文件介绍与读取(3种情况)

news2024/11/12 11:53:03

目录

一、(.properties后缀)的配置文件。

(1)基本介绍。

(2)基本语法。

1、键值对。

2、如何注释?

3、编码类型。

4、空白字符。

5、多行值。

(3)".properties后缀"配置文件的内容读取详细。(核心)

1、java.util.Properties。

2、".properties后缀"配置文件读写的核心。(方法)

二、3种不同的情况的位置——如何正确读取?

(0)配置文件代码。

(1)(.properties)配置文件放在当前整个项目下。

1、项目结构位置图。

2、解释。

3、测试类代码。

4、运行结果图。(成功获取到配置文件里的属性)

5、问题。

(2)(.properties)配置文件放在与之有关系的类的所在目录(包)下。

1、项目结构位置图。

2、解释。

3、测试类代码。

4、运行结果图。(成功获取到配置文件里的属性)

5、问题。

(3)(.properties)配置文件放在当前项目的src目录下。

1、项目结构位置图。

2、解释。

3、测试类代码。

4、运行结果图。(成功获取到配置文件里的属性)

5、编译后,文件结构。


一、(.properties后缀)的配置文件。

(1)基本介绍。
  • Java的".properties后缀"的文件是一种用于存储配置信息的文件格式。
  • 它通常用于存储程序运行时需要的参数、环境变量等配置信息。

(2)基本语法。
1、键值对。
  • ".properties后缀"文件中的配置信息以键值对的形式存储。

  • 也就是配置文件(.properties)的语法是:key——value。(类似于Map)

  • 每行只有一个键值对,且键和值之间用等号(=)分隔。


2、如何注释?
  • 文件中可以包含注释,注释以井号(#)或感叹号(!)开头,从该字符开始到行尾的内容都会被视作注释,不会被程序解析。

3、编码类型。
  • ".properties后缀"文件通常使用ISO-8859-1字符编码。
  • 但也可以使用Unicode编码(如UTF-8)。如果使用Unicode编码,文件的第一行必须是相关的声明。

4、空白字符。
  • 键或值前后的空白字符会被忽略,但值中的空白字符会被保留

5、多行值。
  • 如果一个值需要跨越多行,可以在行尾使用反斜杠(\)来表示值的延续。

(3)".properties后缀"配置文件的内容读取详细。(核心)
1、java.util.Properties。

  • Properties是 Java 中的一个类,属于java.util包。
  • 它用于处理属性文件,这些文件通常以 ".properties"为后缀名。所以(.properties后缀)格式的配置文件内容的解析较方便!
  • Properties类继承自HashTable类,因此它是一个散列表,存储键值对(key-value pairs),其中键和值都是字符串类型


2、".properties后缀"配置文件读写的核心。(方法)
  • Properties类提供了方法来加载和保存属性文件。具体方法如下。

  • load()方法用于从输入流中读取属性列表。(key——value结构)
  • 通过load()方法,可以把(.properties)文件读取并解析成(key/value)结构并存储到Properties对象中。

  • 可以通过输入字节流或者输入字符流读取。
  • 配合FileInputStream类对象可以获取指定文件名的输入字节流



  • 利用Properties对象的getProperty(键名)方法拿到键值(属性值/参数/变量)


  • 而store()方法用于将属性列表写入输出流(字节输出流或字符输出流)。
  • 这里就不详细讲了。(用的不多,方法类似于读

二、3种不同的情况的位置——如何正确读取?

(0)配置文件代码。


(1)(.properties)配置文件放在当前整个项目下。

可能会出现将自己的类打包给别人,出现配置文件丢失情况!


1、项目结构位置图。


2、解释。
  • 这里的new FileInputStream("xxConfig.properties")。文件名"xxConfig.properties"写的是相对路径,而不是绝对路径。
  • 之所以能读取到,是因为它执行时会扫描该项目的系统路径("user.dir")下的文件。注意它是动态的,随着你的项目文件放置的位置,也会改变。也就是通过FileInputStream获取到配置文件的流,再加载配置文件,存储到Properties对象中
  • 然后刚好(.properties)配置文件位于当前整个项目目录下,就可以扫描进行读取。


3、测试类代码。
package com.fs.demo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.util.Properties;

/**
 * @Title: Demo01
 * @Author HeYouLong
 * @Package com.fs.demo
 * @Date 2024/11/9 上午9:34
 * @description: 测试类:需要使用(.properties后缀)的配置文件
 */
public class Demo01 {
    public static void main(String[] args) throws Exception {
        //创建Properties对象
        Properties properties = new Properties();
        //加载指定的配置文件(xxConfig.properties)
        properties.load(new FileInputStream("xxConfig.properties"));
        //通过键名获取对应的键值
        /*
        * location = china
        * WriteDateTime = 2024-11-09
        * weather = sun
        * */
        String location = properties.getProperty("location");
        String writeDateTime = properties.getProperty("WriteDateTime");
        String weather = properties.getProperty("weather");
        System.out.println("地点:"+location+",写作时间:"+writeDateTime+",天气:"+weather);

    }
}

4、运行结果图。(成功获取到配置文件里的属性)


5、问题。

(2)(.properties)配置文件放在与之有关系的类的所在目录(包)下。

通过字节码的路径去寻找配置文件。


1、项目结构位置图。


2、解释。
  • 通过(类名.class)获取类的资源流。则要求类与文件所在同一个目录(包)
  • 再调用方法getResourceAsStream():拿到一个资源将其变成流的方式返回来
  • 再调用Properties对象的load()方法去加载配置文件资源

3、测试类代码。
package com.fs.demo;

import java.io.FileInputStream;
import java.util.Properties;

/**
 * @Title: Demo02
 * @Author HeYouLong
 * @Package com.fs.demo
 * @Date 2024/11/9 上午11:19
 * @description: 测试类:需要使用(.properties后缀)的配置文件
 */
public class Demo02 {
    public static void main(String[] args) throws Exception {
        //创建Properties对象
        Properties properties = new Properties();
        /*系统属性:项目的路径
        System.out.println(System.getProperty("user.dir"));*/
        //加载指定的配置文件(xxConfig.properties)
        //通过获取类的资源流,通过类加载器加载配置文件。要求类与文件所在同一个目录(包)
        properties.load(Demo02.class.getResourceAsStream("xxConfig.properties"));
        //通过键名获取对应的键值
        /*
        * location = china
        * WriteDateTime = 2024-11-09
        * weather = sun
        * */
        String location = properties.getProperty("location");
        String writeDateTime = properties.getProperty("WriteDateTime");
        String weather = properties.getProperty("weather");
        System.out.println("地点:"+location+",写作时间:"+writeDateTime+",天气:"+weather);

    }
}

4、运行结果图。(成功获取到配置文件里的属性)


5、问题。
  • 虽然编译后,成功出现了配置文件,不会丢失。
  • 但是一般不这么写。因为包下就是类。配置文件是配置文件。所以一般分开。配置文件放到src目录下。也就是下面第三种情况。

(3)(.properties)配置文件放在当前项目的src目录下。

推荐:将项目打包发给别人,既不会出现"配置文件"丢失问题!也符合代码常规

1、项目结构位置图。


2、解释。
  • 获取类加载器的方法:类名.class.getClassLoader()
  • 过类加载器获取文件的输入流——>这样就可以获取加载到内存中的配置文件的流。最后再加载配置文件。
  • 再调用方法getResourceAsStream():拿到一个资源将其变成流的方式返回来
  • 再调用Properties对象的load()方法去加载配置文件资源

  • 程序执行的流程图。
  • 通过类加载器(ClassLoader)将硬盘上的编译好的文件(.class:字节码文件)加载到内存中。


3、测试类代码。
package com.fs.demo;

import java.util.Properties;

/**
 * @Title: Demo03
 * @Author HeYouLong
 * @Package com.fs.demo
 * @Date 2024/11/9 上午11:34
 * @description: 测试类:需要使用(.properties后缀)的配置文件
 */
public class Demo03 {
    public static void main(String[] args) throws Exception {
        //创建Properties对象
        Properties properties = new Properties();
        /*系统属性:项目的路径
        System.out.println(System.getProperty("user.dir"));*/
        //加载指定的配置文件(xxConfig.properties)
        //获取类加载器:getClassLoader()
        //通过类加载器获取文件的输入流——>这样就可以获取加载到内存中的配置文件的流
        //再加载配置文件
        properties.load(Demo03.class.getClassLoader().getResourceAsStream("xxConfig.properties"));
        //通过键名获取对应的键值
        /*
        * location = china
        * WriteDateTime = 2024-11-09
        * weather = sun
        * */
        String location = properties.getProperty("location");
        String writeDateTime = properties.getProperty("WriteDateTime");
        String weather = properties.getProperty("weather");
        System.out.println("地点:"+location+",写作时间:"+writeDateTime+",天气:"+weather);

    }
}

4、运行结果图。(成功获取到配置文件里的属性)


5、编译后,文件结构。

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

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

相关文章

yaml文件编写

Kubernetes 支持YAML和JSON格式管理资源 JSON 格式:主要用于 api 接口之间消息的传递 YAML 格式;用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化容易读懂 一,yaml语法格式 1.1 基本语法规则 使用空格进行缩进(不使用制表符&#xff0…

Node.js——fs模块-文件删除

1、在Node.js中,我们可以使用unlink或unlinkSync来删除文件。 2、语法: fs.unlink(path,callback) fs.unlinkSync(path) 参数说明: path 文件路径 callback 操作后的回调函数 本文的分享到此结束,欢迎大家评论区一同讨论学…

新版IJidea 如何打开数据库窗口(2024.2.4 版)(连接数据库)

新版IJidea 2024.2.4 如何打开数据库窗口? 方式:使用插件,Database Navigator 1.安装插件,步骤如下: 打开 Settings/Preferences 对话框(快捷键 CtrlAltS)。前往 Plugins 菜单项。在搜索框中…

黄仁勋:AI数据中心可扩展至百万芯片 性能年翻倍,能耗年减2-3倍

本周,英伟达CEO黄仁勋接受了《No Priors》节目主持人的采访,就英伟达的十年赌注、x.AI超级集群的快速发展、NVLink技术创新等AI相关话题进行了一场深度对话。黄仁勋表示,没有任何物理定律可以阻止将AI数据中心扩展到一百万个芯片,…

java 面向对象高级

1.final关键字 class Demo{public static void main(String[] args) {final int[] anew int[]{1,2,3};// anew int[]{4,5,6}; 报错a[0]5;//可以,解释了final修饰引用性变量,变量存储的地址不能被改变,但地址所指向的对象的内容可以改变} }什…

Codeforces Round 984 (Div. 3)

题目链接 A. Quintomania 题意 思路 模拟即可 示例代码 void solve() {int n;cin >> n;vector<int>arr(n);fer(i, 0 ,n) cin >> arr[i];fer(i, 1, n){if(abs(arr[i] - arr[i - 1]) ! 5 && abs(arr[i] - arr[i - 1]) ! 7){cout << "N…

基于BILSTM及其他RNN序列模型的人名分类器

数据集Kaggle链接 NameNationalLanguage | Kaggle 数据集分布: 第一列为人名,第二列为国家标签 代码开源地址 Kaggle代码链接 https://www.kaggle.com/code/houjijin/name-nationality-classification Gitee码云链接 人名国籍分类 Name Nation classification: using BI…

打包18款AI营销神器,批量运营项目收藏必备!

淘金的不如卖铲子的&#xff0c;AI工具的应用越来越普及&#xff0c;这也让很多原本淘金的人都来卖铲子。如果自己能有很好的铲子&#xff0c;自己也会淘金&#xff0c;就可以既能卖铲子赚钱&#xff0c;也能掏金赚钱。 还有两天就是双十一了&#xff0c;各种AI工具&#xff0…

Leetcode - 周赛422

目录 一&#xff0c;3340. 检查平衡字符串 二&#xff0c;3341. 到达最后一个房间的最少时间 I 三&#xff0c;3342. 到达最后一个房间的最少时间 II 四&#xff0c;3343. 统计平衡排列的数目 一&#xff0c;3340. 检查平衡字符串 本题直接暴力&#xff0c;定义一个变量 s&…

聚观早报 | 比亚迪腾势D9登陆泰国;苹果 iOS 18.2 将发布

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 11月5日消息 比亚迪腾势D9登陆泰国 苹果 iOS 18.2 将发布 真我GT7 Pro防尘防水细节 小米15 Ultra最快明年登场 …

Pytest-Bdd-Playwright 系列教程(7):使用测试代码生成辅助工具

Pytest-Bdd-Playwright 系列教程&#xff08;7&#xff09;&#xff1a;测试代码生成辅助工具的使用 前言一、代码生成辅助工具的设计思路1.1 功能概览1.2 适用人群 二、如何使用 pytest-bdd 代码生成器三、代码生成器的实际应用场景3.1 初学者的学习和实践3.2 大规模功能测试3…

动态规划 —— dp 问题-买卖股票的最佳时机含冷冻期

1. 买卖股票的最佳时机含冷冻期 题目链接&#xff1a; 309. 买卖股票的最佳时机含冷冻期 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/description/ 2. 题目解析 3. 算法原理 状态表示&#xff1a;以…

大数据性能测试怎么做?看完这篇终于懂了

大数据性能测试的目的 1.大数据组件的性能回归&#xff0c;在版本升级的时候&#xff0c;进行新旧版本的性能比对。 2.在新版本/新的生产环境发布之后获取性能基线&#xff0c;建立可度量的参考标准&#xff0c;为其他测试场景或者调优过程提供对比参考。 3.在众多的发行版本…

鸿蒙开发:ArkTS如何读取图片资源

ArkTS在TS的基础上主要扩展了声明式UI能力&#xff0c;简化了构建和更新UI的过程。开发者可以以声明式的方式来描述UI的结构&#xff0c;如使用build方法中的代码块。同时&#xff0c;ArkTS提供了自定义组件、系统组件、属性方法、事件方法等&#xff0c;以构建应用UI界面。今天…

【Unity基础】Unity中如何导入字体?

在Unity中&#xff0c;不能像其他软件一样直接使用字体文件&#xff0c;需要通过FontAssetCreator将其转换成Texture的Asset文件&#xff0c;然后才能使用。 本文介绍了使用FontAssetCreator导入字体的过程&#xff0c;并对其参数设置进行了说明。 Font Asset Creator 是 Uni…

三、直流有刷电机H桥驱动原理

1、H桥简介 H桥驱动电路&#xff1a;是一种用于控制直流电机正反转及速度的电路&#xff0c;其名称来源于其电路结构类似于字母“H”。H桥驱动电路由四个开关元件&#xff08;如晶体管、MOSFET等&#xff09;组成&#xff0c;这些开关元件被配置成可以控制电机两端电流的方向&…

Unity性能优化 -- 性能分析工具

Stats窗口Profiler窗口Memory Profiler其他性能分析工具&#xff08;Physica Debugger 窗口&#xff0c;Import Activity 窗口&#xff0c;Code Coverage 窗口&#xff0c;Profile Analyzer 窗口&#xff0c;IMGUI Debugger 窗口&#xff09; Stats 统级数据窗口 game窗口 可…

html的week控件 获取周(星期)的第一天(周一)和最后一天(周日)

html的week控件 获取周(星期)的第一天(周一)和最后一天(周日) <input type"week" id"week" class"my-css" value"ViewBag.DefaultWeek" /><script> function PageList() { var dateStrin…

[C++11] 可变参数模板

文章目录 基本语法及原理可变参数模板的基本语法参数包的两种类型可变参数模板的定义 sizeof... 运算符可变参数模板的实例化原理可变参数模板的意义 包扩展包扩展的基本概念包扩展的实现原理编译器如何展开参数包包扩展的高级应用 emplace 系列接口emplace_back 和 emplace 的…

Axure设计之左右滚动组件教程(动态面板)

很多项目产品设计经常会遇到左右滚动的导航、图片展示、内容区域等&#xff0c;接下来我们用Axure来实现一下左右滚动的菜单导航。通过案例我们可以举一反三进行其他方式的滚动组件设计&#xff0c;如常见的上下滚动、翻页滚动等等。 一、效果展示&#xff1a; 1、点击“向左箭…