java读取配置文件
- 格式:doc
- 大小:33.00 KB
- 文档页数:2
一、概述Java是一种流行的编程语言,广泛应用于企业级软件开发。
在Java应用程序中,经常需要读取配置文件中的参数,以便程序在不同环境下能够灵活运行。
本文将介绍在Java中获取配置文件参数的方法。
二、使用Properties类在Java中,可以使用Properties类来读取配置文件。
Properties是HashTable的子类,它用于处理键值对形式的配置信息。
下面是使用Properties类获取配置文件参数的步骤:1. 创建Properties对象首先使用Properties类创建一个对象,用于存储配置文件中的参数。
可以通过以下代码实现:```javaProperties props = new Properties();```2. 加载配置文件接下来,需要将配置文件加载到Properties对象中。
通常配置文件的格式是.properties,可以通过以下代码加载:```javatry{InputStream inputStream =getClass().getClassLoader().getResourceAsStream("config.prope rties");props.load(inputStream);}catch(IOException e){e.printStackTrace();}```上述代码中,使用ClassLoader的getResourceAsStream方法加载配置文件,并使用Properties的load方法将文件内容加载到props 对象中。
3. 获取参数值一旦配置文件加载到props对象中,就可以通过getProperty方法获取参数值。
获取名为"db.url"的参数值可以使用以下代码:```javaString dbUrl = props.getProperty("db.url");```通过上述步骤,就可以在Java中轻松获取配置文件中的参数值了。
Properties的相对路径以及⽂件的读取操作在我们平时写程序的时候,有些参数是经常改变的,⽽这种改变不是我们预知的。
⽐如说我们开发了⼀个操作数据库的模块,在开发的时候我们连接本地的数据库那么 IP ,数据库名称,表名称,数据库主机等信息是我们本地的,要使得这个操作数据的模块具有通⽤性,那么以上信息就不能写死在程序⾥。
通常我们的做法是⽤配置⽂件来解决。
各种语⾔都有⾃⼰所⽀持的配置⽂件类型。
⽐如 Python,他⽀持 .ini⽂件。
因为他内部有⼀个 ConfigParser类来⽀持 .ini⽂件的读写,根据该类提供的⽅法程序员可以⾃由的来操作 .ini⽂件。
⽽在 Java中, Java⽀持的是 .properties⽂件的读写。
JDK内置的 java.util.Properties类为我们操作 .properties⽂件提供了便利。
⼀. .properties⽂件的形式 ==========================================================#以下为服务器、数据库信息dbPort = localhostdatabaseName = mydbdbUserName = rootdbPassword = root#以下为数据库表信息dbTable = mytable#以下为服务器信息ip = 192.168.0.9······在上⾯的⽂件中我们假设该⽂件名为: test.properties⽂件。
其中 #开始的⼀⾏为注释信息;在等号“ =”左边的我们称之为 key;等号“ =”右边的我们称之为 value 。
(其实就是我们常说的键 -值对) key应该是我们程序中的变量。
⽽ value是我们根据实际情况配置的。
⼆. JDK中的 Properties类 Properties类存在于胞 Java.util中,该类继承⾃ Hashtable ,它提供了⼏个主要的⽅法:1. ( key) ,⽤指定的键在此属性列表中搜索属性。
Java程序读取配置⽂件的⼏种⽅法Java 开发中,需要将⼀些易变的配置参数放置再 XML 配置⽂件或者 properties 配置⽂件中。
然⽽ XML 配置⽂件需要通过 DOM 或 SAX ⽅式解析,⽽读取 properties 配置⽂件就⽐较容易。
1. 读取properties⽂件的⽅法1. 使⽤类加载器ClassLoder类读取配置⽂件InputStream in = MainClass.class.getClassLoader().getResourceAsStream("com/demo/config.properties");MainClass.class是主类的反射对象,因为getClassLoader()是class类的对象⽅法。
在类加载器中调⽤getResourceAsStream()时,采⽤相对路径,起始位置在src⽬录,路径开头没有“/”。
InputStream in = (new MainClass()).getClass().getClassLoader().getResourceAsStream("com/demo/config.properties");因为getClass()是object类的对象⽅法,所有在主类调⽤时要将主类实体化,即new MainClass()。
同理,相对路径起始位置同上。
2. ⽤class对象读取配置⽂件之所以Class对象也可以加载资源⽂件是因为Class类封装的getResourceAsStream⽅法的源码中调⽤了类加载器。
InputStream in = MainClass.class.getResourceAsStream(“/com/demo/config.properties”);同样MainClass.class是主类的反射对象。
在class对象中调⽤getResourceAsStream()时,采⽤绝对路径,起始位置在类路径(bin⽬录),因此路径要以“/”开头。
读取Properties文件六种方法private static void init() {try {if (pro == null)synchronized (SsoParams.class) {if (pro == null) {pro = new Properties();InputStream in =SsoParams.class.getResourceAsStream("sso_config.properties");pro.load(in);}}}catch (Exception e) {e.printStackTrace();}}开发项目时,经常把一些参数存入Properties文件,以增加程序的灵活性。
我们可以通过以下六种方法读取配置参数(注意:spring对properties的读取也有很好的集成):1、使用java.util.Properties类的load()方法示例:InputStream in = lnew BufferedInputStream(new FileInputStream(name));Properties p = new Properties();p.load(in);2、使用java.util.ResourceBundle类的getBundle()方法示例:ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());3、使用java.util.PropertyResourceBundle类的构造函数示例:InputStream in = new BufferedInputStream(new FileInputStream(name));ResourceBundle rb = new PropertyResourceBundle(in);4、使用class变量的getResourceAsStream()方法示例:InputStream in = JProperties.class.getResourceAsStream(name);Properties p = new Properties();p.load(in);5、使用class.getClassLoader()所得到的ng.ClassLoader的getResourceAsStream()方法示例:InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name);Properties p = new Properties();p.load(in);6、使用ng.ClassLoader类的getSystemResourceAsStream()静态方法示例:InputStream in = ClassLoader.getSystemResourceAsStream(name);Properties p = new Properties();p.load(in);补充Servlet中可以使用javax.servlet.ServletContext的getResourceAsStream()方法示例:InputStream in = context.getResourceAsStream(path);Properties p = new Properties();p.load(in);。
Java_JDBC连接数据库_使⽤读取配置⽂件的⽅式 1package com.homewoek3_4.dao;23import java.io.IOException;4import java.io.InputStream;5import java.sql.Connection;6import java.sql.DriverManager;7import java.sql.PreparedStatement;8import java.sql.ResultSet;9import java.sql.SQLException;10import java.util.Properties;1112/**13 * 数据库连接通⽤类14 * @author Administrator15*/16public abstract class BaseDao {17private static final String path = "database.properties";18private static String DB_DRIVER;19private static String DB_URL;20private static String DB_USER;21private static String DB_PWD;2223protected Connection conn = null;24protected PreparedStatement ps = null;25protected ResultSet rs = null;2627static {28 Properties pro = new Properties();29 InputStream io = BaseDao.class.getClassLoader().getResourceAsStream(path);30try {31//读取配置⽂件32 pro.load(io);33 } catch (IOException e) {34 e.printStackTrace();35 }36 DB_DRIVER = pro.getProperty("DB_DRIVER");37 DB_URL = pro.getProperty("DB_URL");38 DB_USER = pro.getProperty("DB_USER");39 DB_PWD = pro.getProperty("DB_PWD");40try {41//加载驱动类42 Class.forName(DB_DRIVER);43 } catch (ClassNotFoundException e) {44 e.printStackTrace();45 }46 }47/**48 * 打开数据库连接49*/50protected void openConn() {51try {52 conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PWD);53 } catch (SQLException e) {54 e.printStackTrace();55 }56 }57/**58 * 关闭数据库连接59*/60protected void closeConn() {61try {62if (rs != null) {63 rs.close();64 }65if (ps != null) {66 ps.close();67 }68if (conn != null) {69 conn.close();70 }71 } catch (SQLException e) {72 e.printStackTrace();73 }74 }75/**76 * 增删改77 * @param sql78 * @param obj79 * @return80*/81protected int executeUpdate(String sql, Object...obj) {82int result = -1;83this.openConn();84try {85 ps = conn.prepareStatement(sql);86if (obj != null) {87for (int i = 0; i < obj.length; i++) {88 ps.setObject(i+1, obj[i]);89 }90 }91 result = ps.executeUpdate();92 } catch (SQLException e) {93 e.printStackTrace();94 }95return result;96 }97/**98 * 查询99 * @param sql100 * @param obj101 * @return102*/103protected void executeQuery(String sql, Object...obj) {104this.openConn();105try {106 ps = conn.prepareStatement(sql);107if (obj != null) {108for (int i = 0; i < obj.length; i++) {109 ps.setObject(i+1, obj[i]);110 }111 }112 rs = ps.executeQuery();113 } catch (SQLException e) {114 e.printStackTrace();115 }116 }117 }创建database.properties⽂件,注意:后缀名⼀定是properties。
private static String getXmlContent()throws IOException {Reader f = newInputStreamReader(QueryWeather.class.getClass().getResourceAsStream("/weather/we ather.xml"));BufferedReader fb = new BufferedReader(f);StringBuffer sb = new StringBuffer(“”);String s = "";while((s = fb.readLine()) != null) {sb = sb.append(s);}return sb.toString();}package com.read;import java.io.*;public class Resource {public void getResource() throws IOException{//返回读取指定资源的输入流InputStream is=this.getClass().getResourceAsStream("/struts-default.xml"); BufferedReader br=new BufferedReader(new InputStreamReader(is));String s="";while((s=br.readLine())!=null)System.out.println(s);}}这个类是jar包中的类,同时jar根下还有个struts-default.xml文件。
ClassLoader classloader = Thread.currentThread().getContextClassLoader(); InputStream is = classloader.getResourceAsStream("com/xxx/xxxx/yourfile.xml");一般情况下properties文件都是在工程内使用的,如果application打成jar包之后,修改properties文件后就需要重新打jar,很麻烦。
java 引用外部配置文件的方法Java作为一种广泛应用的编程语言,经常需要引用外部配置文件来获取程序的设置参数。
本文将介绍几种常用的方法来实现这个目的。
一、使用Properties类Properties类是Java提供的一个用于处理配置文件的工具类,它可以读取和写入配置文件的键值对。
使用Properties类引用外部配置文件的步骤如下:1. 创建一个Properties对象。
2. 使用load()方法读取配置文件,将配置文件的内容加载到Properties对象中。
3. 使用getProperty()方法根据键名获取配置项的值。
下面是一个示例代码:```javaimport java.io.FileInputStream;import java.io.IOException;import java.util.Properties;public class ConfigReader {public static void main(String[] args) {Properties properties = new Properties();try {FileInputStream fis = newFileInputStream("config.properties");properties.load(fis);fis.close();} catch (IOException e) {e.printStackTrace();}String url = properties.getProperty("url");String username = properties.getProperty("username"); String password = properties.getProperty("password"); System.out.println("url: " + url);System.out.println("username: " + username);System.out.println("password: " + password);}}```在这个例子中,我们使用了一个名为config.properties的配置文件,其中包含了url、username和password三个配置项的值。
java读取外部配置文件的方法在Java中,您可以使用多种方法来读取外部配置文件,这有助于将应用程序配置信息从代码中分离,使得配置更加灵活。
以下是一些常见的方法:1.使用`Properties`类:可以使用Java的`Properties`类来读取键值对形式的配置文件,通常是`.properties`文件。
例如:```javaimport java.io.FileInputStream;import java.io.IOException;import java.util.Properties;public class ConfigReader{public static void main(String[]args){Properties properties=new Properties();try(FileInputStream fileInputStream=newFileInputStream("config.properties")){properties.load(fileInputStream);String value=properties.getProperty("key");System.out.println("Value:"+value);}catch(IOException e){e.printStackTrace();}}}```2.使用`ResourceBundle`类:如果您的配置文件在类路径中,可以使用`ResourceBundle`类来读取配置信息。
这对于国际化和本地化也很有用。
```javaimport java.util.ResourceBundle;public class ConfigReader{public static void main(String[]args){ResourceBundle bundle=ResourceBundle.getBundle("config");String value=bundle.getString("key");System.out.println("Value:"+value);}}```3.使用第三方库:除了标准Java库,您还可以使用第三方库,如Apache Commons Configuration或Typesafe Config,来更灵活地处理配置文件。
【文章标题】:深度解析Java代码中读取项目工程中的文件的方法与技巧在我们的日常开发中,读取项目工程中的文件是一项非常常见的任务。
特别是在Java开发中,我们经常需要读取配置文件、模板文件、日志文件等。
本文将围绕这一主题展开讨论,探讨Java代码中读取项目工程中的文件的方法与技巧,帮助读者更深入地理解并灵活运用相关知识。
1. 文件读取的基本概念在开始具体讨论Java代码中读取项目工程中的文件之前,我们首先来回顾一下文件读取的基本概念。
文件读取是指程序通过输入设备获取文件中的数据,常见的文件读取操作包括文件的打开、读取、关闭等。
在Java中,文件读取通常涉及到IO流的使用,其核心思想是通过流来实现对文件的读取和写入。
2. 使用File类进行文件读取Java中提供了File类来表示文件和目录路径名,我们可以通过File类来实现对项目工程中文件的读取操作。
首先通过File类的实例化对象来表示要读取的文件,然后可以通过该对象调用相关方法实现文件的读取操作。
在代码中,通常会使用FileInputStream或FileReader来读取文件的内容,通过这些类提供的方法,可以逐行或者逐个字节地读取文件的数据。
3. 使用ClassLoader获取资源文件除了使用File类来读取文件外,我们还可以通过ClassLoader来获取项目工程中的资源文件。
ClassLoader是Java中用于加载类文件和资源文件的类加载器,通过ClassLoader可以直接获取到项目工程中的资源文件的输入流,从而进行文件的读取操作。
相比于File类,通过ClassLoader获取资源文件可以更方便地定位和读取资源,特别适合于读取类路径下的文件。
4. Apache Commons IO库的应用除了Java标准库提供的File类和ClassLoader,我们还可以借助第三方库来简化文件读取的操作。
Apache Commons IO是一个常用的Java开发工具库,在文件操作方面提供了丰富且便捷的功能。
JAVA中读写配置文件2007-12-22java中读写属性文件下面的文章来自CSDN hyde82的专栏,因为很实用,所以就摘下来放在此处,具体网址忘记啦.无论是有图形化的选项配置对话框,或者是系统提供的注册表,文本形式的本地配置文件依然是最牢靠、应用最广泛的配置信息保存形式。
配置信息的一般模式就是一个配置项对应一个值,前者一般是个字符串,后者可能是数字或者字符串或者别的什么。
在传统win32编程中有系统提供的api供我们解读.ini文件,后来也有操作注册表的封装好的api,在.net中更是有解读XML形式.config文件的现成方法。
在Java中,对配置文件的使用进行封装也是十分有意义的。
封装应该达到这样的效果:应用只管从配置信息进行按名读取值、设置值、保存等操作,而不需要关心具体以什么文件格式保存、如何解析。
文件格式(纯文本?XML?数据库?)、IO 方式(本地文件?远程文件?控制台流?)在封装类内部的变更,都不会影响应用对配置信息的感知。
从键名-值的对应关系以及文件的存取,我们最容易想到的就是java.util.Properties对象,他是HashTable的子类,保存的就是很多组键名-值的对应二原组,并提供快速的查询和直接的从文件读取、保存为文件的方法。
具体请参考相关文档,我们直接看程序。
首先自定义一个异常://ConfigurationException.javapackage configuration;public class ConfigurationException extends Exception{ public ConfigurationException(){}public ConfigurationException(String msg){super(msg);}}然后是我们的封装类://Configuration.javapackage configuration;import java.io.*;import java.util.*;import configuration.*;public class Configuration {private Properties config=new Properties();//记录配置项private String fn=null;//记录配置文件名//此构造方法用于新建配置文件public Configuration(){}//从指定文件名读入配置信息public Configuration(String fileName)throws ConfigurationException {try {FileInputStream fin = new FileInputStream(fileName); config.load(fin); //载入文件fin.close();}catch (IOException ex) {throw new ConfigurationException("无法读取指定的配置文件:"+fileName);}fn=fileName;}//指定配置项名称,返回配置值public String getValue(String itemName){return config.getProperty(itemName);}//指定配置项名称和默认值,返回配置值public String getValue(String itemName,String defaultValue){return config.getProperty(itemName,defaultValue);}//设置配置项名称及其值public void setValue(String itemName,String value){ config.setProperty(itemName,value);return;}//保存配置文件,指定文件名和抬头描述public void saveFile(String fileName,String description) throws ConfigurationException {try {FileOutputStream fout= new FileOutputStream(fileName);config.store(fout, description);//保存文件fout.close();}catch (IOExeption ex) {throw new ConfigurationException("无法保存指定的配置文件:"+fileName);}}//保存配置文件,指定文件名public void saveFile(String fileName)throws ConfigurationException {saveFile(fileName,"");}//保存配置文件,采用原文件名public void saveFile() throws ConfigurationException { if(fn.length()==0)throw new ConfigurationException("需指定保存的配置文件名");saveFile(fn);}}从这个封装类我们可以看到,实例化对象的时候我们可以指定一个文件名使得从中读取配置信息,通过getValue方法取得属性值,setValue方法设置属性值,saveFile方法保存文件。
一般来说,首页的内容比较多,但内容大多也有重复的地方,比如说某几块内容都是文章,只是文章类别不同,或者说某几块都是商品,只是商品的分类不同,那么我们在后台取数据时,都需要根据类别ID来取值的。
通常的做法都是写死ID,但写死又分为三种情况:
1、前台写死ID,通过<jsp:include page="xx.do?id=xx">,可以进行动态的包含内容。
2、可在service层写一个id的数组,String[] ids = {“”,"",""};用ids数组的下标来获得id值,这样也可以实现,如果数据库的ID值发生改变,只需要改变service层的ID数组就行。
3、用配置文件(这个配置文件以.properties结尾)。
将ID值写在配置文件中,表示的方法就和map一样,key=value,这样就OK。
下面我要说的是第三种方案,个人觉得第三种方案比第二种方案好,因为第二种方案改数据时,去找的话,有点不太方便。
/**
*java读取配置文件工具类
**
*/
public class ProperUtil {
private static final Logger log= Logger.getLogger(ProperUtil.class);
/**服务器配置文件的文件名*/
private static final String FILE_NAME = "resources.properties";
private static final Properties prop = new Properties();
static {
InputStream in
=ProperUtil.class.getClassLoader().getResourceAsStream(FILE_NAME);
("开始加载配置文件"+FILE_NAME);
try {
prop.load(in);
(FILE_NAME+"配置文件读取完毕!");
} catch (Exception e) {
log.error("加载"+FILE_NAME+"配置文件出错!"+e.getMessage());
}finally{
if(null != in){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static Properties getProp() {
return prop;
}
}
这里配置文件的地址一定要写对,不然就会报错。
SysConfig.properties里面的内容是:
/**
*基站照片保存路径
*@return
*/
public static String getSiteImagePath(){
Properties prop = ProperUtil.getProp();
return prop.getProperty("NewSId");
}
最后结果输出:002。