在java中如何读取properties文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java中如何读取properties文件相关的知识,希望对你有一定的参考价值。

我把sql的连接方式封装在properties文件了、有什么方法去读取它呢,就是我想用的时候就读取出来了、读取方法也封装下,到时候直接取读取方法就好了、

最常用读取properties文件的方法
InputStream in = getClass().getResourceAsStream("资源Name");这种方式要求properties文件和当前类在同一文件夹下面。如果在不同的包中,必须使用:
InputStream ins = this.getClass().getResourceAsStream("/cn/zhao/properties/testPropertiesPath2.properties");
Java中获取路径方法
获取路径的一个简单实现
反射方式获取properties文件的三种方式

1 反射方式获取properties文件最常用方法以及思考:
Java读取properties文件的方法比较多,网上最多的文章是"Java读取properties文件的六种方法",但在Java应用中,最常用还是通过java.lang.Class类的getResourceAsStream(String name) 方法来实现,但我见到众多读取properties文件的代码中,都会这么干:

InputStream in = getClass().getResourceAsStream("资源Name");

这里面有个问题,就是getClass()调用的时候默认省略了this!我们都知道,this是不能在static(静态)方法或者static块中使用的,原因是static类型的方法或者代码块是属于类本身的,不属于某个对象,而this本身就代表当前对象,而静态方法或者块调用的时候是不用初始化对象的。

问题是:假如我不想让某个类有对象,那么我会将此类的默认构造方法设为私有,当然也不会写别的共有的构造方法。并且我这个类是工具类,都是静态的方法和变量,我要在静态块或者静态方法中获取properties文件,这个方法就行不通了。

那怎么办呢?其实这个类就不是这么用的,他仅仅是需要获取一个Class对象就可以了,那还不容易啊--
取所有类的父类Object,用Object.class难道不比你的用你正在写类自身方便安全吗 ?呵呵,下面给出一个例子,以方便交流。
import java.util.Properties;
import java.io.InputStream;
import java.io.IOException;

/**
* 读取Properties文件的例子
* File: TestProperties.java
* User: leizhimin
* Date: 2008-2-15 18:38:40
*/
public final class TestProperties
private static String param1;
private static String param2;

static
Properties prop = new Properties();
InputStream in = Object. class .getResourceAsStream( "/test.properties" );
try
prop.load(in);
param1 = prop.getProperty( "initYears1" ).trim();
param2 = prop.getProperty( "initYears2" ).trim();
catch (IOException e)
e.printStackTrace();



/**
* 私有构造方法,不需要创建对象
*/
private TestProperties()


public static String getParam1()
return param1;


public static String getParam2()
return param2;


public static void main(String args[])
System.out.println(getParam1());
System.out.println(getParam2());



运行结果:

151
152
当然,把Object.class换成int.class照样行,呵呵,大家可以试试。

另外,如果是static方法或块中读取Properties文件,还有一种最保险的方法,就是这个类的本身名字来直接获取Class对象,比如本例中可写成TestProperties.class,这样做是最保险的方法
2 获取路径的方式:
File fileB = new File( this .getClass().getResource( "" ).getPath());

System. out .println( "fileB path: " + fileB);

2.2获取当前类所在的工程名:
System. out .println("user.dir path: " + System. getProperty ("user.dir"))<span style="background-color: white;">3 获取路径的一个简单的Java实现</span>
/**

*获取项目的相对路径下文件的绝对路径

*

* @param parentDir

*目标文件的父目录,例如说,工程的目录下,有lib与bin和conf目录,那么程序运行于lib or

* bin,那么需要的配置文件却是conf里面,则需要找到该配置文件的绝对路径

* @param fileName

*文件名

* @return一个绝对路径

*/

public static String getPath(String parentDir, String fileName)

String path = null;

String userdir = System.getProperty("user.dir");

String userdirName = new File(userdir).getName();

if (userdirName.equalsIgnoreCase("lib")

|| userdirName.equalsIgnoreCase("bin"))

File newf = new File(userdir);

File newp = new File(newf.getParent());

if (fileName.trim().equals(""))

path = newp.getPath() + File.separator + parentDir;

else

path = newp.getPath() + File.separator + parentDir

+ File.separator + fileName;



else

if (fileName.trim().equals(""))

path = userdir + File.separator + parentDir;

else

path = userdir + File.separator + parentDir + File.separator

+ fileName;





return path;



4 利用反射的方式获取路径:
InputStream ips1 = Enumeration . class .getClassLoader() .getResourceAsStream( "cn/zhao/enumStudy/testPropertiesPath1.properties" );

InputStream ips2 = Enumeration . class .getResourceAsStream( "testPropertiesPath1.properties" );

InputStream ips3 = Enumeration . class .getResourceAsStream( "properties/testPropertiesPath2.properties" );
参考技术A 最常用读取properties文件的方法 InputStream in = getClass().getResourceAsStream("资源Name");这种方式要求properties文件和当前类在同一文件夹下面。如果在不同的包中,必须使用: InputStream ins = this.getClass().getResourceAsStream( 参考技术B java.util.Properties

void load(InputStream inStream)
Reads a property list (key and element pairs) from the input byte stream.
void load(Reader reader)
Reads a property list (key and element pairs) from the input character stream in a simple line-oriented format.

String getProperty(String key)
Searches for the property with the specified key in this property list.
String getProperty(String key, String defaultValue)
Searches for the property with the specified key in this property list.
参考技术C 使用java.util.Properties

1、创建一个Properties对象。
2、使用对象的load方法加载你的property文件。
3、使用getProperty方法取值。
例子:
package com.bill.test;

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

public class Test
public static void main(String[] args) throws Exception
Properties property = new Properties();
property.load(new FileInputStream("你的文件位置"));
String value = property.getProperty("你的属性的key");
//TODO 使用value...

本回答被提问者和网友采纳
参考技术D 使用java.util.Properties

如何把数据库的properties文件内容读取到Java中

首先在数据库中有properties文件

里面的内容以键值对的方式出现

例如

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
user=root
pwd=950218

 

然后设置一个类进行读取里面的driver,url等

例如:

public class MasterUtil {
    private static String url;
    private static String user;
    private static String pwd;

static{
    ResourceBundle rbundle = ResourceBundle.getBundle("database");
    String driver = rbundle.getString("driver");
    try {
        Class.forName(driver);  //这个是加载数据库的驱动,调用了文件里的driver;
        url = rbundle.getString("url");
        user = rbundle.getString("user");
        pwd = rbundle.getString("pwd");
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

然后这里面的内容就读取完了,并且以全局变量的形式出现的;后面直接调用就好了

以上是关于在java中如何读取properties文件的主要内容,如果未能解决你的问题,请参考以下文章

在java中如何读取properties文件

JAVA中如何读取src下所有的properties文件?

java web中读取文件,相对路径怎么写

java 如何读取jar包外的properties文件(转)

如何修改properties数据配置文件

读取properties文件方式