Java读取配置文件的几种方法
在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据笔者工作中用到的读取配置文件的方法小小总结一下,主要叙述的是spring读取配置文件的方法。
一.读取xml配置文件
(一)新建一个java bean(HelloBean. java)
java代码
1234567891011121314package chb.demo.vo;
public
class
HelloBean {
private
String helloWorld;
public
String getHelloWorld() {
return
helloWorld;
}
public
void
setHelloWorld(String helloWorld) {
this
.helloWorld = helloWorld;
}
}
(二)构造一个配置文件(beanConfig.xml)
xml 代码
二.读取properties配置文件
这里介绍两种技术:利用spring读取properties 文件和利用java.util.Properties读取(一)利用spring读取properties 文件我们还利用上面的HelloBean. java文件,构造如下beanConfig.properties文件:properties 代码
12helloBean.
class
=chb.demo.vo.HelloBean
helloBean.helloWorld=Hello!chb!
属性文件中的"helloBean"名称即是Bean的别名设定,.class用于指定类来源。然后利用org.springframework.beans.factory.support.PropertiesBeanDefinitionReader来读取属性文件
java代码
123456BeanDefinitionRegistry reg =
new
DefaultListableBeanFactory();
PropertiesBeanDefinitionReader reader =
new
PropertiesBeanDefinitionReader(reg);
reader.loadBeanDefinitions(
new
ClassPathResource(
"beanConfig.properties"
));
BeanFactory factory = (BeanFactory)reg;
HelloBean helloBean = (HelloBean)factory.getBean(
"helloBean"
);
System.
out
.println(helloBean.getHelloWorld());
(二)利用java.util.Properties读取属性文件比如,我们构造一个ipConfig.properties来保存服务器ip地址和端口,如:properties 代码
12ip=192.168.0.1
port=8080
则,我们可以用如下程序来获得服务器配置信息:java代码
12345678InputStream inputStream =
this
.getClass().getClassLoader().getResourceAsStream(
"ipConfig.properties"
);
Properties p =
new
Properties();
try
{
p.load(inputStream);
}
catch
(IOException e1) {
e1.printStackTrace();
}
System.
out
.println(
"ip:"
+p.getProperty(
"ip"
)+
",port:"
+p.getProperty(
"port"
));
三.读取位于Jar包之外的properties配置文件
下面仅仅是列出读取文件的过程,剩下的解析成为properties的方法同上
1 FileInputStream reader = new FileInputStream("config.properties");
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | num = reader.read(byteStream); ByteArrayInputStream inStream = new ByteArrayInputStream(byteStream, 0, num); 四.要读取的配置文件和类文件一起打包到一个Jar中 String currentJarPath = URLDecoder.decode(YourClassName. class .getProtectionDomain().getCodeSource().getLocation().getFile(), "UTF-8" ); //获取当前Jar文件名,并对其解码,防止出现中文乱码 JarFile currentJar = new JarFile(currentJarPath); JarEntry dbEntry = currentJar.getJarEntry( "包名/配置文件" ); InputStream in = currentJar.getInputStream(dbEntry); //以上YourClassName是class全名,也就是包括包名 修改: JarOutputStream out = new FileOutputStream(currentJarPath); out .putNextEntry(dbEntry); out .write( byte [] b, int off, int len); //写配置文件 。。。 out .close(); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2018-08-20 Redis内存回收:LRU算法
2018-08-20 Redis Sentinel实现的机制与原理详解
2018-08-20 深入Redis漏斗限流
2018-08-20 java 服务接口API限流 Rate Limit
2018-08-20 分布式环境下限流方案的实现redis RateLimiter Guava,Token Bucket, Leaky Bucket
2018-08-20 将bloomfilter(布隆过滤器)集成到scrapy-redis中
2018-08-20 Redis Cluster 分区实现原理