zoukankan      html  css  js  c++  java
  • Java读写资源文件类Properties

    Java中读写资源文件最重要的类是Properties

    1) 资源文件要求如下:

    1、properties文件是一个文本文件
    2、properties文件的语法有两种,一种是注释,一种属性配置。
     注    释:前面加上#号
     属性配置:以“键=值”的方式书写一个属性的配置信息。
    3、properties文件的一个属性配置信息值可以换行,但键不可以换行。值换行用“”表示。
    4、properties的属性配置键值前后的空格在解析时候会被忽略。
    5、properties文件可以只有键而没有值。也可以仅有键和等号而没有值,但无论如何一个属性配置不能没有键。
    eg:
    正确的资源文件格式为:
     
     

    2) 功能大致如下:

    1. 读写Properties文件
    2. 读写XML文件
    3. 不仅可以读写上述两类文件,还可以读写其它格式文件如txt等,只要符合key=value格式即可.
    Properties能读取以key,value存储的任何格式文件,看一下他的类结构就知道为什么了
    从上面的类结构图可以看出,它继承了Hashtable并实现了Map接口
     
    3)代码演示:
      1 package com.ifly.myhome.test;
      2 
      3 import java.io.File;
      4 import java.io.FileInputStream;
      5 import java.io.FileOutputStream;
      6 import java.io.IOException;
      7 import java.io.InputStream;
      8 import java.io.OutputStream;
      9 import java.io.UnsupportedEncodingException;
     10 import java.util.Properties;
     11 
     12 public class PropertiesMyTest
     13 {
     14 
     15     public static void main(String[] args)
     16     {
     17 
     18         String readfile = "e:" + File.separator + "readfile.properties";
     19         String writefile = "e:" + File.separator + "writefile.properties";
     20         String readxmlfile = "e:" + File.separator + "readxmlfile.xml";
     21         String writexmlfile = "e:" + File.separator + "writexmlfile.xml";
     22         String readtxtfile = "e:" + File.separator + "readtxtfile.txt";
     23         String writetxtfile = "e:" + File.separator + "writetxtfile.txt";
     24 
     25         readPropertiesFile(readfile); //读取properties文件
     26         writePropertiesFile(writefile); //写properties文件
     27         readPropertiesFileFromXML(readxmlfile); //读取XML文件
     28         writePropertiesFileToXML(writexmlfile); //写XML文件
     29         readPropertiesFile(readtxtfile); //读取txt文件
     30         writePropertiesFile(writetxtfile); //写txt文件
     31     }
     32 
     33     //读取资源文件,并处理中文乱码
     34     public static void readPropertiesFile(String filename)
     35     {
     36         Properties properties = new Properties();
     37         try
     38         {
     39             InputStream inputStream = new FileInputStream(filename);
     40             properties.load(inputStream);
     41             inputStream.close(); //关闭流
     42         }
     43         catch (IOException e)
     44         {
     45             e.printStackTrace();
     46         }
     47         String username = properties.getProperty("username");
     48         String passsword = properties.getProperty("password");
     49         String chinese = properties.getProperty("chinese");
     50         try
     51         {
     52             chinese = new String(chinese.getBytes("ISO-8859-1"), "GBK"); // 处理中文乱码
     53         }
     54         catch (UnsupportedEncodingException e)
     55         {
     56             e.printStackTrace();
     57         }
     58         System.out.println(username);
     59         System.out.println(passsword);
     60         System.out.println(chinese);
     61     }
     62 
     63     //读取XML文件,并处理中文乱码
     64     public static void readPropertiesFileFromXML(String filename)
     65     {
     66         Properties properties = new Properties();
     67         try
     68         {
     69             InputStream inputStream = new FileInputStream(filename);
     70             properties.loadFromXML(inputStream);
     71             inputStream.close();
     72         }
     73         catch (IOException e)
     74         {
     75             e.printStackTrace();
     76         }
     77         String username = properties.getProperty("username");
     78         String passsword = properties.getProperty("password");
     79         String chinese = properties.getProperty("chinese"); //XML中的中文不用处理乱码,正常显示
     80         System.out.println(username);
     81         System.out.println(passsword);
     82         System.out.println(chinese);
     83     }
     84 
     85     //写资源文件,含中文
     86     public static void writePropertiesFile(String filename)
     87     {
     88         Properties properties = new Properties();
     89         try
     90         {
     91             OutputStream outputStream = new FileOutputStream(filename);
     92             properties.setProperty("username", "myname");
     93             properties.setProperty("password", "mypassword");
     94             properties.setProperty("chinese", "中文");
     95             properties.store(outputStream, "author: shixing_11@sina.com");
     96             outputStream.close();
     97         }
     98         catch (IOException e)
     99         {
    100             e.printStackTrace();
    101         }
    102     }
    103 
    104     //写资源文件到XML文件,含中文  
    105     public static void writePropertiesFileToXML(String filename)
    106     {
    107         Properties properties = new Properties();
    108         try
    109         {
    110             OutputStream outputStream = new FileOutputStream(filename);
    111             properties.setProperty("username", "myname");
    112             properties.setProperty("password", "mypassword");
    113             properties.setProperty("chinese", "中文");
    114             properties.storeToXML(outputStream, "author: shixing_11@sina.com");
    115             outputStream.close();
    116         }
    117         catch (IOException e)
    118         {
    119             e.printStackTrace();
    120         }
    121     }
    122 
    123 }
    View Code
    运行本程序所需的资源文件,我是放在E盘根目录,如E:/readfile.properties
    1. readfile.properties
    username=kh
    password=kh
    chinese=谓语
    2. writefile.properties
    #author: shixing_11@sina.com
    #Fri May 28 22:19:44 CST 2010
    password=kh
    chinese=u8C13u8BED
    username=kh

    3. readxmlfile.xml

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
    <entry key="password">mypassword</entry>
    <entry key="chinese">中文</entry>
    <entry key="username">myname</entry>
    </properties>
    4. writexmlfile.xml
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
    <entry key="password">kh</entry>
    <entry key="chinese">中文</entry>
    <entry key="username">kh</entry>
    </properties>

    5. readtxtfile.txt    
               username=kh
               password=kh
               chinese=中文
    6. writetxtfile.txt
     
               password=kh
               chinese=/u4E2D/u6587
               username=kh
     
    4)Properties获取数据乱码解决

    1.原因

    Properties调用load(InputStream)时,读取文件时使用的默认编码为ISO-8859-1;当我们讲中文放入到properties文件中,通过getProperty(key)获取值时,取到得数据是ISO-8859-1格式的,但是ISO-8859-1是不能识别中文的。

    2.解决方法

    通过getProperty()获取的数据data既然是ISO-8859-1编码的,就通过data.getByte(“iso-8859-1”)获取获取,使用new String(data.getByte(“iso-8859-1”),”UTF-8”)进行转换。当然properties文件的编码类型需要和new String(Byte[],charst)中的第二个参数的编码类型相同

     
     
  • 相关阅读:
    Javaweb开发环境与搭建
    剑指Offer:面试题32——从1到n整数中1出现的次数(java实现)
    剑指Offer:面试题31——连续子数组的最大和(java实现)
    剑指Offer:面试题30——最小的k个数(java实现)
    剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)
    剑指Offer:解决难题时的三大方法
    剑指Offer:面试题28——字符串的排列(java实现)(待序)
    剑指Offer:面试题27——二叉搜索树与双向链表(java实现)
    剑指Offer:面试题26——复制复杂的链表(java实现)
    剑指Offer:面试题25——二叉树中和为某一值的路径(java实现)
  • 原文地址:https://www.cnblogs.com/xiaofengkang/p/3862553.html
Copyright © 2011-2022 走看看