java读取properties文件

简介:

关键字: java读取properties配置文件 今天要将以前一个项目的数据连接改成从properties文件中配置。找了好久,网上也不少,可就是读取文件时总是找不到文件在哪(我放在classes目录下了)。最后终于成功,记下,以做纪念。

Java代码
package com.web.connection;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Conn {
private String fileName="/db.properties";//这里是指放在classes下,如果有包的话,前面加包名即可。例:/com/web/db.properties
private String driver = "";
private String url = "";
private String username ="";
private String password = "";
Connection conn=null;


public  Connection  getConn(){
Properties p = new Properties();
try {
InputStream in = Conn.class.getResourceAsStream(fileName);// 与类在同一级,也可用/package/path/to/fileName
p.load(in);
in.close();
if(p.containsKey("driver")){
this.driver = p.getProperty("driver");
}
if(p.containsKey("url")){
this.url = p.getProperty("url");
}
if(p.containsKey("user")){
this.username = p.getProperty("user");
}
if(p.containsKey("password")){
this.password = p.getProperty("password");
}
} catch (IOException ex) {
Logger.getLogger(Conn.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(p.getProperty("driver"));
try {
Class.forName(this.driver);
conn = DriverManager.getConnection(this.url,this.username,this.password);
} catch (SQLException ex) {
ex.printStackTrace();
System.out.print("获取连接异常");
} catch (ClassNotFoundException ex) {
System.out.print("加载驱动出错");
ex.printStackTrace();;
}
return conn;
}
}
package com.web.connection;  import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger;  public class Conn {     private String fileName="/db.properties";//这里是指放在classes下,如果有包的话,前面加包名即可。例:/com/web/db.properties     private String driver = "";     private String url = "";     private String username ="";     private String password = "";     Connection conn=null;           public  Connection  getConn(){         Properties p = new Properties();   try {    InputStream in = Conn.class.getResourceAsStream(fileName);//这里有人用new FileInputStream(fileName),不过这种方式找不到配置文件。有人说是在classes下,我调过了,不行。       p.load(in);       in.close();       if(p.containsKey("driver")){           this.driver = p.getProperty("driver");       }       if(p.containsKey("url")){           this.url = p.getProperty("url");       }       if(p.containsKey("user")){           this.username = p.getProperty("user");       }       if(p.containsKey("password")){           this.password = p.getProperty("password");       }   } catch (IOException ex) {       Logger.getLogger(Conn.class.getName()).log(Level.SEVERE, null, ex);   }         System.out.println(p.getProperty("driver"));        try {             Class.forName(this.driver);             conn = DriverManager.getConnection(this.url,this.username,this.password);         } catch (SQLException ex) {             ex.printStackTrace();             System.out.print("获取连接异常");         } catch (ClassNotFoundException ex) {             System.out.print("加载驱动出错");             ex.printStackTrace();;         }         return conn;     } }

 

网上文章常见的几种读取.properties文件的方式

1、使用java.util.Properties类的load()方法 示例:

Java代码
  1. InputStream in = lnew BufferedInputStream(new FileInputStream(name));   
  2. Properties p = new Properties();   
  3. p.load(in);  
InputStream in = lnew BufferedInputStream(new FileInputStream(name));  Properties p = new Properties();  p.load(in);



2、使用java.util.ResourceBundle类的getBundle()方法
示例:

Java代码
  1. ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());   
ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());



用ResourceBundle读取.properties文件可避免路径问题
我在jar里读取.properties文件时,总是找不到文件路径,后来用ResourceBundle读取.properties文件即可避免路径问题,代码如下:


//process为文件名,切记不要加 .properties, URL是文件里的键名

Java代码
  1.     ResourceBundle bundle = ResourceBundle.getBundle("com.ihandy.smsoc.app.process");  
  2.    String s = bundle.getString("URL");  
  3. System.out.println(s);  
  4. pURL = s;  
ResourceBundle bundle = ResourceBundle.getBundle("com.ihandy.smsoc.app.process");      String s = bundle.getString("URL");   System.out.println(s);   pURL = s;




3、使用java.util.PropertyResourceBundle类的构造函数
示例:

Java代码
  1. InputStream in = new BufferedInputStream(new FileInputStream(name));   
  2. ResourceBundle rb = new PropertyResourceBundle(in);   
InputStream in = new BufferedInputStream(new FileInputStream(name));  ResourceBundle rb = new PropertyResourceBundle(in);



4、使用class变量的getResourceAsStream()方法
示例:

Java代码
  1. InputStream in = 类名.class.getResourceAsStream(name);   
  2. Properties p = new Properties();   
  3. p.load(in);   
InputStream in = 类名.class.getResourceAsStream(name);  Properties p = new Properties();  p.load(in);


5、使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法 示例:

Java代码
  1. InputStream in = 类名.class.getClassLoader().getResourceAsStream(name);   
  2. Properties p = new Properties();   
  3. p.load(in);   
InputStream in = 类名.class.getClassLoader().getResourceAsStream(name);  Properties p = new Properties();  p.load(in);



6、使用java.lang.ClassLoader类的getSystemResourceAsStream()静态方法 示例:

Java代码
  1. InputStream in = ClassLoader.getSystemResourceAsStream(name);   
  2. Properties p = new Properties();   
  3. p.load(in);   
InputStream in = ClassLoader.getSystemResourceAsStream(name);  Properties p = new Properties();  p.load(in);



7、Servlet中可以使用javax.servlet.ServletContext的getResourceAsStream()方法 示例:

Java代码
  1. InputStream in = context.getResourceAsStream(path);   
  2. Properties p = new Properties();   
  3. p.load(in);  
相关文章
|
3月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
186 14
|
3月前
|
存储 Java 编译器
深入理解Java虚拟机--类文件结构
本内容介绍了Java虚拟机与Class文件的关系及其内部结构。Class文件是一种与语言无关的二进制格式,包含JVM指令集、符号表等信息。无论使用何种语言,只要能生成符合规范的Class文件,即可在JVM上运行。文章详细解析了Class文件的组成,包括魔数、版本号、常量池、访问标志、类索引、字段表、方法表和属性表等,并说明其在Java编译与运行过程中的作用。
|
3月前
|
存储 人工智能 Java
java之通过Http下载文件
本文介绍了使用Java实现通过文件链接下载文件到本地的方法,主要涉及URL、HttpURLConnection及输入输出流的操作。
182 0
|
4月前
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
320 5
|
11月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
209 9
|
11月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
268 2
|
4月前
|
网络协议 安全 Java
实现Java语言的文件断点续传功能的技术方案。
像这样,我们就完成了一项看似高科技、实则亲民的小工程。这样的技术实现不仅具备实用性,也能在面对网络不稳定的挑战时,稳稳地、不失乐趣地完成工作。
236 0
|
10月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
1965 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
7月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
8月前
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。