JAVA中读取XML文件中的配置信息

时间:2021-11-28 04:28:52

在进行MIS系统开发过程中,从配置文件中读取配置信息是每一个系统必须具备的功能,例如,我们要配置读取数据库配置信息,包括驱动程序名、连接字符串,用户名,口令等信息,由于这些信息会随着用户的不同而发生改变,所以不能直接把参数写在程序中,将其写入配置文件,然后在应用程序中读取配置信息并加以使用,是一个成熟的MIS系统必须具有的基本功能。

  JAVA与XML文件,可以说是软件开发的“黄金搭档”,而如何使用JAVA完成对XML文件的读取,是我们首先要解决的问题。

  一、XML文件

  这个示例文件包括了用来打开ORACLE数据库的各种参数

    <?xml version="1.0" encoding="UTF-8"?>
<dbmsg>
 <dbinfo>
  <drivername>oracle.jdbc.driver.OracleDriver</drivername>
  <sConnStr>jdbc:oracle:thin:@11.88.225.80:1521:VOUCHERDB</sConnStr>
  <username>SYS AS SYSDBA</username>
  <password>voucherdb</password>
 </dbinfo>
</dbmsg>

二、编写类名为ReadXml的类,用于解析XML文件

  我们要在应用程序中打开数据库,就必须完成对该文件中drivername、sConnStr、username、password的读取,通过查找有关资料,笔者编制了以下程序,用于读取文件名为filename的XML文件。

  package voucher.basic;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;


public class ReadXml {
 private String drivername;
 private String sConnStr;
 private String username;
 private String password;
  
 public String getDrivername() {
  return drivername;
 }

 public String getSConnStr() {
  return sConnStr;
 }

 public String getUsername() {
  return username;
 }

 public String getPassword() {
  return password;
 }
 public void setDrivername(String drivername) {
  this.drivername = drivername;
 }

 public void setSConnStr(String connStr) {
  sConnStr = connStr;
 }

 public void setUsername(String username) {
  this.username = username;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 public ReadXml(String fileName){
  DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
  try {
   DocumentBuilder dombuilder=domfac.newDocumentBuilder();
   InputStream is=new FileInputStream(fileName);
   Document doc=dombuilder.parse(is);
   Element root=doc.getDocumentElement();
   NodeList dbinfo=root.getChildNodes();
   if(dbinfo!=null){
    for(int i=0;i<dbinfo.getLength();i++){
     Node db=dbinfo.item(i);
       for(Node node=db.getFirstChild();node!=null;node=node.getNextSibling()){
        if(node.getNodeType()==Node.ELEMENT_NODE){
         if(node.getNodeName().equals("drivername")){
          setDrivername(node.getFirstChild().getNodeValue());
         }
         if(node.getNodeName().equals("sConnStr")){
          setSConnStr(node.getFirstChild().getNodeValue());
         }
         if(node.getNodeName().equals("username")){
          setUsername(node.getFirstChild().getNodeValue());
         }
         if(node.getNodeName().equals("password")){
          setPassword(node.getFirstChild().getNodeValue());
         }
        }
      }         
       }        
     }
  } catch (ParserConfigurationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SAXException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }  
 } 
}

 

 

这个以ReadXml命名的类,使用了参数为文件名的构造方法,用户只要将配置文件我名称传递给该方法,就可以完成对XML文件的解析,进而完成对相应参数数的读取。

 

三、如何获取XML文件全路径并读取配置参数

  获取XML文件全路径的方法有两个,一是在servlet中获取,二是在单独的JAVA类中获取。

  1.在servlet中获取XML文件的全路径并读取配置参数

  程序片段String   dirPath = getServletContext().getRealPath( "/WEB-INF"); 
  String fileName = dirPath + "/conn.xml";
  ReadXml xm = new ReadXml(fileName);
  String DriverName = xm.getDrivername();
  String connStr = xm.getSConnStr();
  String user = xm.getUsername();
  String pas = xm.getPassword();
  

  将这段程序添加到servlet中dopost()之后即可完成参数的读取

  2.在单独的JAVA类中获取全路径并读取配置参数

  程序片段

 

String dirpath = System.getProperty("user.dir");
  String  xmlFile = dirpath + "/WebRoot/WEB-INF/conn.xml";
  ReadXml rdxml = new ReadXml(xmlFile);
  String driverName = rdxml.getDrivername();
  String sConnStr = rdxml.getSConnStr();
  String userName = rdxml.getUsername();
  String passWord = rdxml.getPassword();

 

注:配置文件conn.xml保存在webroot/WEB-INF目录中。

以上方法供参考。

点击打开链接