Java的Properties类和读取.properties文件
一、.properties文件的作用
Properties属性文件在JAVA应用程序中是经常可以看得见的,也是特别重要的一类文件。它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,而使用一般的文本文件来保存,如果是通过File直接保存的话,可能在存储和读取上都不是很方便,但如果保存为Properties文件就不一样了,属性文件都有键值对应的,在JAVA的包中,有提供专门的操作属性文件的类。这个类就是 java.uitl.Properties类,由于Properties类是一个集合类,所以,Properties会将属性以集合的方式读写。(配置文件有两种:XML和.properties文件)
在Java中,.properties文件的内容格式是"键-值"的格式,文本的注释信息可以用"#"来注释。
二、Java Properties类
Properties类继承自Hashtable,如下:
它提供的主要方法:
- getProperty(String key):用指定的键在此属性列表中搜索属性。也就是通过key得到对应的value
- load(InputStream inStream):通过对指定文件进行装载来获得(键-值)对,以供getProperty()调用。
- setProperty(String key,String value):调用基类的put方法来设置键-值对
- store(OutPutStream out,String comments):将键-值对按照文件的格式写入到指定文件中
- clear():清除所有转载的键-值对
三、写.properties文件
默认情况下,空格可以作为Properties文件中Key和Value的分隔符,当我们需要在Key中使用空格的时候,可以使用反斜杠(\)对空格进行转移。注: 斜杠为(/),反斜杠为(\)。
尽量少使用等号和空格。一定要注意使用空格。在每行的末尾尽量不要使用空格。
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/userdate username=root password=root
如果在userdate后边加一个空格保存,程序运行时候就会提示userdate不存在
四、java web 读取.properties文件
db.properties
url = "jdbc:mysql://localhost:3306/test" username="root" name="root"
第一种:使用ServletContext的getResourceAsStream方法:返回资源文件的读取字节流
public void test1() throws IOException{
InputStream in=this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties props=new Properties();
props.load(in);
String url=props.getProperty("url");
String username=props.getProperty("username");
String password=props.getProperty("password");
System.out.println(url);
System.out.println(username);
System.out.println(password);
}
this.getClass().getClassLoader().getResource 的详解:
- 调用对象的getClass()方法是获得对象当前的类类型
- 在类类型上调用getClassLoader()方法是得到当前类型的类加载器
- 最后调用了类加载器的getResourceAsStream()方法来加载资源。
第二种:使用ServletContext的getRealPath方法,获得文件的完整绝对路径path,再使用字节流读取path下的文件
public void test2() throws IOException{
String path =this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");
FileInputStream in=new FileInputStream(path);
////相比第一种方法的好处是:除了可以获取数据,还可以获取资源文件的名称
String filename=path.substring(path.lastIndexOf("\\")+1);
System.out.println(filename);
Properties props=new Properties();
props.load(in);
String url=props.getProperty("url");
String username=props.getProperty("username");
String password=props.getProperty("password");
System.out.println(url);
System.out.println(username);
System.out.println(password);
}
第三种:类加载器:
/*
* 使用类路径的读取方式:
* / :斜杠标示classpath的根目录
* 在java项目下:classpath的根目录从bin开始
* 在web 项目下:classpath的根目录从WEB-INF/classes目录开始
*/
//读取db.properties文件
Properties props=new Properties();
InputStream in= JdbcUtil.class.getResourceAsStream("/db.properties");
props.load(in);
url=(String) props.get("url");
user=props.getProperty("user");
password=props.getProperty("password");
driverClass=props.getProperty("driverClass");
五、Java操作Properties类
Properties(配置文件类):主要用于生产配置文件与读取配置文件的信息。
- 要注意的细节:如果配置文件的信息一旦使用了中文,那么在使用store方法,生成配置文件的时候只能使用字符流解决,如果使用字节流生成配置文件,默认使用的是ISO8859-1码表进行编码存储,这时候会出现乱码
- 如果Properties中的内容发生了变化,一定要重新
//读取配置文件的信息
public static void readProperties() throws FileNotFoundException, IOException{
//创建Properties
Properties properties=new Properties();
//加载配置文件
properties.load(new FileReader("F:\\user.properties"));
Set<Entry<Object, Object>> entrys=properties.entrySet();
//遍历Properties
for(Entry<Object,Object> entry:entrys){
System.out.println("键:"+entry.getKey()+" 值:"+entry.getValue());
}
//更新配置文件
properties.setProperty("校长", "345");
properties.store(new FileWriter("F:\\user.properties"), "用户");
}
//保存配置文件的信息
public static void createProperties() throws FileNotFoundException, IOException{
//创建Properties
Properties properties=new Properties();
properties.setProperty("校长", "123456");
properties.setProperty("撒个", "123456");
properties.setProperty("个长", "123456");
//遍历Properties
Set<Entry<Object, Object>> entrys=properties.entrySet();
for(Entry<Object,Object> entry:entrys){
System.out.println("键:"+entry.getKey()+" 值:"+entry.getValue());
}
//保存Properties
properties.store(new FileWriter("F:\\user.properties"), "用户");
}
六、练兵场地
package cn.lyjs.other;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
/*
* 软件使用超过三次,提示购买正版软件
*/
public class Demo2 {
public static void main(String[] args) throws IOException {
File file =new File("F:\\count.properties");
if(!file.exists()) file.createNewFile();
//创建Properties对象
Properties proterties=new Properties();
proterties.load(new FileInputStream(file));
int count=0;//记录访问的次数
String value=(String) proterties.get("count");
if(value!=null){
count=Integer.parseInt(value);
}
count++;
System.out.println("你已经访问了"+count+"次");
if(count>3){
System.out.println("你已经访问三次,请购买正版");
}
//更改访问的次数
proterties.setProperty("count", count+"");
proterties.store(new FileOutputStream("F:\\count.properties"), "count的记录");
}
}
七、常见错误
出现这种错误,有可能文件地址配置错误


浙公网安备 33010602011771号