【特殊文件---properties】

news2024/11/15 13:44:47

properties 

1. 注释

在properties中注释是采用#号开头的方式来进行注释的

2. 编写properties文件

在properties中,一行就是一个键值对(key=value),简单的理解就是一行可以保存一个变量,键和值之间用=号隔开

记住,不用打双引号(“”)打了的话读取的时候会读取到(“”)除非你自己需要双引号
不要有重复的键,要不然后面的值会覆盖前面的值

3. 部分例子

# String
person.last-name=john
# int
person.age=112
# boolean
person.boss=false
# Date
person.birth=2019/11/12
# List<Object>
person.dogs[0].name=jj
person.dogs[0].age=111
person.dogs[1].name=tom
person.dogs[1].age=111
# Map<String, Object>
person.maps.Jack=jackc2
person.maps.Iris=yili8
# List
person.lists[0]=1
person.lists[1]=2

4. 注意事项

  • 避免重复键:在Properties文件中,每个键都应该是唯一的。如果出现重复的键,则后面的值将覆盖前面的值。
  • 编码:Properties文件默认使用ISO 8859-1(也称为Latin-1)编码。如果需要在文件中包含非ASCII字符,建议使用UTF-8编码,并在读取文件时指定正确的编码方式。
  • 文件扩展名:虽然Properties文件的扩展名不是强制的,但通常使用.properties作为文件扩展名,以便于识别和管理。

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

构造函数

Properties()

这个构造函数用于创建一个空的Properties对象,即不包含任何键值对的集合。

Properties properties = new Properties();  
// 现在properties是一个空的Properties对象

Properties(String fileName)

这个构造函数尝试从指定的文件名加载属性列表(key 和 value 对)。

public class Main {
    public static void main(String[] args) throws Exception {
        Properties properties=new Properties();
        System.out.println(properties);
        System.out.println("---------------------------");
        //这里他担心你文件不存在。所以你只需要alt加enter键抛出异常就可以了。
        properties.load(new FileReader("E:\\code\\javese\\summerVacation\\src\\love.properties"));
        System.out.println(properties);
    }
}

常用方法

public void load(InputStream is)

通过字节输入流读取属性文件(如.properties文件)中的键值对数据。

try (FileInputStream fis = new FileInputStream("config.properties")) {  
    Properties properties = new Properties();  
    properties.load(fis);  
    // 处理properties中的数据  
} catch (IOException e) {  
    e.printStackTrace();  
}

public void load(Reader reader)

通过字符输入流读取属性文件中的键值对数据。这适用于需要处理非二进制属性文件(如使用特定字符编码的文件)的情况。

try (FileReader fr = new FileReader("config.properties");  
     BufferedReader br = new BufferedReader(fr)) {  
    Properties properties = new Properties();  
    properties.load(br);  
    // 处理properties中的数据  
} catch (IOException e) {  
    e.printStackTrace();  
}

public String getProperty(String key)

根据指定的键获取对应的值。如果找不到该键,则返回null

Properties properties = // 假设这里已经加载了属性文件  
String databaseUrl = properties.getProperty("database.url");  
System.out.println("Database URL: " + databaseUrl);

public Set<String> stringPropertyNames()

返回此属性列表中所有键的Set视图,其中键及其对应的值是字符串。这相当于调用了keySet()方法,但返回的是Set<String>而不是Set<Object>,因为Properties中的键和值都是字符串。

Properties properties = // 假设这里已经加载了属性文件  
Set<String> keys = properties.stringPropertyNames();  
for (String key : keys) {  
    System.out.println(key + ": " + properties.getProperty(key));  
}

将键值对数据写入属性文件的Properties类常用方法

setProperty(String key, String value)

这个方法用于在Properties对象中设置或更新一个键值对。它接受两个参数:key(键)和value(值),两者都是字符串类型。如果键已经存在,则该方法会替换原有的值;如果键不存在,则会在Properties对象中添加一个新的键值对。

示例代码

Properties props = new Properties();  
props.setProperty("database.url", "jdbc:mysql://localhost:3306/mydb");  
props.setProperty("username", "admin");  
// 现在props对象中包含了两个键值对

store(OutputStream os, String comments)

这个方法用于将Properties对象中的键值对写入到指定的输出流中,通常是文件输出流(FileOutputStream),从而生成一个属性文件。它接受两个参数:os(输出流)和comments(注释)。注释字符串将作为属性文件的头部注释写入文件,如果为null,则不写入注释。

示例代码

Properties props = // 假设这里已经设置了键值对  
try (FileOutputStream fos = new FileOutputStream("config.properties")) {  
    props.store(fos, "This is a configuration file for my application.");  
    // 现在config.properties文件包含了props对象中的所有键值对,以及一个头部注释  
} catch (IOException e) {  
    e.printStackTrace();  
}

store(Writer w, String comments)

这个方法与store(OutputStream os, String comments)类似,但它接受的是一个Writer对象而不是OutputStream。这允许你以字符为单位写入数据,这对于需要特定字符编码的属性文件特别有用。同样,它也接受一个注释字符串作为第二个参数。

示例代码

Properties props = // 假设这里已经设置了键值对  
try (FileWriter fw = new FileWriter("config_utf8.properties", StandardCharsets.UTF_8)) {  
    props.store(fw, "This is a UTF-8 encoded configuration file.");  
    // 现在config_utf8.properties文件包含了props对象中的所有键值对,以及一个头部注释,并且文件以UTF-8编码保存  
} catch (IOException e) {  
    e.printStackTrace();  
}

注意事项

  • 在使用store方法时,请确保你有权写入指定的文件路径,并且该文件路径是有效的。
  • 如果文件已经存在,store方法会覆盖它。如果你不想覆盖现有文件,请在写入之前进行检查。
  • 注释字符串是可选的,但如果你提供了它,它将被写入属性文件的开头,作为头部注释。
  • 当处理完文件后,确保关闭输出流或写入器,以避免资源泄露。在上面的示例中,我使用了try-with-resources语句来自动管理资源。

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

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

相关文章

使用Maple Flow进行工程计算与代码生成的图文教程

在工程和科学计算领域&#xff0c;Maple Flow以其强大的数学引擎和代码生成功能&#xff0c;成为工程师和研究人员的得力助手。本文将通过一系列步骤&#xff0c;引导您如何使用Maple Flow从概念验证到生成可在其他环境中运行的代码&#xff0c;完成一个完整的工作流程。 第一…

LLM大模型技术实战:一文讲透专补大模型短板的RAG

大型语言模型&#xff08;LLMs&#xff09;已经成为我们生活和工作的一部分&#xff0c;它们以惊人的多功能性和智能化改变了我们与信息的互动方式。但是当我们将大模型应用于实际业务场景时会发现&#xff0c;通用的基础大模型基本无法满足我们的实际业务需求&#xff0c;主要…

大模型时代,云南白药如何成为一家AI医药企业?|产业AI案例

作者|斗斗 编辑|皮爷 出品|产业家 中医药大模型发布&#xff1b;英伟达成立AI制药部门&#xff0c;发力生物制药领域&#xff1b;赛诺菲与百图生科达成战略合作&#xff0c;共同开发用于生物治疗药物发现的领先模型&#xff1b;京东发布医疗大模型&#xff1b;百度“产业级”…

机器学习--特征工程常用API

1. DictVectorizer - 字典特征提取 DictVectorizer 是一个用于将字典&#xff08;如Python中的字典对象&#xff09;转换为稀疏矩阵的工具&#xff0c;常用于处理类别型特征。 DictVectorizer(sparseTrue, sortTrue, dtype<class numpy.float64>)参数&#xff1a; spar…

ggplot阶截断坐标轴-gggap

目录 gggap包安装 功能查询 简单版使用代码 复杂版使用代码 gggap包安装 CRAN: Package gggap (-project.org) 手动下载安装 功能查询 > ?gggap > ?gggapDefine Segments in y-Axis for ggplot2 Description Easy-to-define segments in y-axis for ggplot2. …

使用Clion开发STM32串口调试遇到问题之重定向printf不显示(已解决问题)

为什么要使用重定向printf C语言中经常使用printf来输出调试信息&#xff0c;打印到屏幕。由于在单片机中没有屏幕&#xff0c;但是我们可以重定向printf&#xff0c;把数据打印到串口&#xff0c;从而在电脑端接收调试信息。这是除了debug外&#xff0c;另外一个非常有效的调…

根据前序遍历和中序遍历生成二叉树,并层序遍历输出二叉树

二叉树 前序遍历&#xff1a;ABDFCEGH 中序遍历&#xff1a;BFDAGEHC 演示 代码&#xff1a; package com.fdw.algorithm.hhh;import com.fdw.algorithm.structure.TreeNode;import java.util.LinkedList; import java.util.Queue;/*** description:* author: ThatMonth* cr…

Javaweb学习之JavaScript输出与字符串(二)

前情回顾 Javaweb学习之JavaScript&#xff08;一&#xff09;-CSDN博客 学习资源 w3school 在线教程 本期介绍 输出语句 在JavaScript中&#xff0c;有几种方式可以输出信息到控制台&#xff08;console&#xff09;、浏览器窗口&#xff08;window&#xff09;或其他地方。…

谷粒商城实战笔记-220~224-商城业务-微博认证服务-OAuth2.0

文章目录 一&#xff0c;220-商城业务-认证服务-OAuth2.0简介二&#xff0c;221-商城业务-认证服务-微博登录测试1&#xff0c;创建微博应用2&#xff0c;应用配置重定向url3&#xff0c;修改商城登录页面4&#xff0c;点击微博登录5&#xff0c;点击授权 三&#xff0c;222-商…

[译]开发者与熵的博弈

原文&#xff1a;https://itnext.io/entropy-in-software-development-77ed9110ef28 翻译&#xff1a;我的文章翻译智能体 文章润色智能体 文章转脑图智能体 人工校对 文章脉络&#xff1a; 文章概括&#xff1a; 文章通过热力学的视角&#xff0c;深入探讨了软件开发中的复…

GitHub的未来:在微软领导下保持独立与AI发展的平衡

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

企业高性能web服务器----nginx详细知识点+实验

知识点 一、Web 服务介绍 Apache Nginx 1、Apache 经典的 Web 服务端 Apache 起初由美国的伊利诺伊大学香槟分校的国家超级计算机应用中心开发 目前经历了两大版本分别是 1.X 和 2.X 其可以通过编译安装实现特定的功能 2、Apache的三种模型 Apache prefork 模型 预…

4000元亮度最高的投影仪:当贝X5S 3300CVIA流明超高亮度白天也清晰

你购买投影仪的时候一般预算多少&#xff1f;目前市面上的投影仪价位有几百也有上万&#xff0c;品牌和类型都比较多&#xff0c;买投影前比较关注哪些投影仪参数&#xff1f;最近有朋友向我咨询购买投影仪的事项&#xff0c;预算在4000左右&#xff0c;问问4000元哪款投影仪哪…

Ollama Desktop

一、简介 Ollama Desktop是基于Ollama引擎的一个桌面应用解决方案&#xff0c;用于在macOS、Windows和Linux操作系统上运行和管理Ollama模型的GUI工具。 Ollama Desktop提供了丰富的功能&#xff0c;包括但不限于&#xff1a; 可视化的管理界面&#xff1a;用户可以通过图形…

推荐3款免费强大OCR神器,工作必备,总有一款适合你,必须收藏

ShareX ShareX是一款功能强大且免费的开源屏幕捕捉和录屏工具&#xff0c;主要用于Windows操作系统。它不仅可以捕捉任何屏幕区域&#xff0c;还可以录制视频、拍摄屏幕截图&#xff0c;并将其上传到各种在线平台。ShareX的功能非常全面&#xff0c;包括截图、录屏、加水印、裁…

低代码平台:效率与创新的双重引擎

低代码开发在软件开发领域是一种越来越流行的趋势&#xff0c;这是有充分理由的。低代码使专业开发人员和非开发人员能够构建更易于集成、修改和升级的复杂企业解决方案&#xff0c;使企业能够快速轻松地创建软件应用程序无需丰富的编码经验。低代码平台彻底改变了软件开发方式…

LLM应用实战: 产业治理多标签分类

1. 背景 许久未见&#xff0c;甚是想念~ 近期本qiang~换了工作&#xff0c;处于新业务适应期&#xff0c;因此文章有一段时间未更新&#xff0c;理解万岁&#xff01; 现在正在着手的工作是产业治理方面&#xff0c;主要负责其中一个功能模块&#xff0c;即按照产业治理标准体…

巡检机器人有哪些功能和应用场景

随着科技的飞速发展&#xff0c;巡检机器人作为智能化、自动化的重要代表&#xff0c;已经在多个领域展现出其独特的优势。从工业生产到特殊环境监测&#xff0c;巡检机器人以其高效、准确和安全的特性&#xff0c;逐渐取代了传统的人工巡检方式&#xff0c;极大地提升了巡检效…

spring boot(学习笔记第十八课)

spring boot(学习笔记第十八课) Spring boot的定时任务和Quartz 学习内容&#xff1a; Spring boot的定时任务Spring boot的Quartz 1. Spring boot的定时任务 定义定时任务 加入必要的依赖 <dependency><groupId>org.springframework.boot</groupId&g…

STM32 —— TIM(基本定时器)详解_stm32的tim

STM32 —— TIM&#xff08;基本定时器&#xff09;详解_stm32的tim 一、定时器简介 STM32F1 系列中&#xff0c;除了互联型的产品&#xff0c;共有 8 个定时器&#xff0c;分为基本定时器&#xff0c;通用定时器和高级定时器。基本定时器 TIM6 和 TIM7 是一个 16 位的只能向…