Java 開発で XML およびプロパティ構成ファイルを読み取る方法

高洛峰
リリース: 2017-01-12 10:27:03
オリジナル
1643 人が閲覧しました

関連書籍:

Ajax を使用したファイルとその他のパラメーターのアップロード (Java 開発)

1. XML ファイル:

XML とは? XML は一般に、標準ユニバーサル マークアップ言語のサブセットである拡張マークアップ言語を指します。これは、電子ドキュメントを構造化するためにマークアップに使用されるマークアップ言語です。

2. XML ファイルの利点:

1) XML ドキュメントの内容と構造は完全に分離されています。
2) 強力な相互運用性。
3) 統一規格。
4) 複数のエンコーディングをサポートします。
5) 強力な拡張性。

3. XML ドキュメントの解析方法:

XML は異なる言語でも同様に XML ドキュメントを解析しますが、実装される構文は 2 つあります。1 つは XML に基づく SAX メソッドです。順番にステップバイステップで。もう 1 つの解析方法は DOM メソッドであり、DOM 解析の鍵となるのはノードです。 DOM4J、JDOM などの方法もあります。この記事では、XML ドキュメントを読み取るための DOM、DOM4J メソッドと、それをツール クラスにカプセル化する方法を紹介します。

4.XML ドキュメント:

scores.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
 <!ELEMENT students (student+)>
 <!ELEMENT student (name,course,score)>
 <!ATTLIST student id CDATA #REQUIRED>
 <!ELEMENT name (#PCDATA)>
 <!ELEMENT course (#PCDATA)>
 <!ELEMENT score (#PCDATA)>
]>
<students>
 <student id="11">
  <name>张三</name>
  <course>JavaSE</course>
  <score>100</score>
 </student>
 <student id="22"> 
  <name>李四</name>
  <course>Oracle</course>
  <score>98</score>
 </student>
</students>
ログイン後にコピー

5.XML を解析する DOM メソッド

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
  //1.创建DOM解析器工厂
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  //2.由DOM解析器工厂创建DOM解析器
  DocumentBuilder db = dbf.newDocumentBuilder();
  //3.由DOM解析器解析文档,生成DOM树
  Document doc = db.parse("scores.xml");
  //4.解析DOM树,获取文档内容(元素 属性 文本)
  //4.1获取根元素scores
  NodeList scoresList = doc.getChildNodes();
  Node scoresNode = scoresList.item(1);
  System.out.println(scoresList.getLength());
  //4.2获取scores中所有的子元素student
  NodeList studentList = scoresNode.getChildNodes();
  System.out.println(studentList.getLength());
  //4.3对每个student进行处理
  for(int i=0;i<studentList.getLength();i++){
   Node stuNode = studentList.item(i);
   //System.out.println(stuNode.getNodeType());
   //输出元素的属性 id
   if(stuNode.getNodeType()==Node.ELEMENT_NODE){
    Element elem =(Element)stuNode;
    String id= elem.getAttribute("id");
    System.out.println("id------>"+id);
   }
   //输出元素的子元素 name course score
   NodeList ncsList = stuNode.getChildNodes();
   //System.out.println(ncsList.getLength() );
   for(int j=0;j<ncsList.getLength();j++){
    Node ncs = ncsList.item(j);
    if(ncs.getNodeType() == Node.ELEMENT_NODE){
      String name = ncs.getNodeName();
      //String value = ncs.getFirstChild().getNodeValue();//文本是元素的子节点,所以要getFirstChild
      String value = ncs.getTextContent();
      System.out.println(name+"----->"+value);
    }
   }
   System.out.println();
  }
 }
ログイン後にコピー

6.XML ドキュメントを解析する DOM4J メソッド:

public static void main(String[] args) throws DocumentException {
 //使用dom4j解析scores2.xml,生成dom树
 SAXReader reader = new SAXReader();
 Document doc = reader.read(new File("scores.xml")); 
 //得到根节点:students
 Element root = doc.getRootElement(); 
 //得到students的所有子节点:student
 Iterator<Element> it = root.elementIterator();
 //处理每个student
 while(it.hasNext()){
  //得到每个学生
  Element stuElem =it.next();
  //System.out.println(stuElem);
  //输出学生的属性:id
  List<Attribute> attrList = stuElem.attributes();
  for(Attribute attr :attrList){
   String name = attr.getName();
   String value = attr.getValue();
   System.out.println(name+"----->"+value);
  }
  //输出学生的子元素:name,course,score
  Iterator <Element>it2 = stuElem.elementIterator();
  while(it2.hasNext()){
   Element elem = it2.next();
   String name = elem.getName();
   String text = elem.getText();
   System.out.println(name+"----->"+text);
  }
  System.out.println();
 }
}
ログイン後にコピー

もちろん、XML の解析にどの方法を使用しても、jar パッケージをインポートする必要があります (忘れないでください)。

7. 私自身の方法:

実際の開発プロジェクトでは、ツール クラスを使いこなす必要があり、繰り返し使用する関数をツール クラスにカプセル化する必要があります。そのため、私は次の方法を開発プロセス中に使用します。 .

7.1 プロパティ ファイルとは:

7.1.1 構造的に言えば:

.xml ファイルは主にツリー ファイルです。
.properties ファイルは主にキーと値のペアの形式で存在します

7.1.2 柔軟な観点から:

.xml ファイルは、.properties ファイルよりも柔軟に読み取ることができます。

7.1.3 利便性の観点から:

.properties ファイルは .xml ファイルよりも設定が簡単です。

7.1.4 アプリケーションの観点:

.properties ファイルは、.xml の方が柔軟性が高いため、小規模で単純なプロジェクトに適しています。

7.2 私自身のプロパティドキュメント:

私は自分のプロジェクトに path.properties ファイルを作成しました。これは、これから使用するパスを保存するために使用され、name = value の形式で保存されます。例:

realPath = D:/file/

7.3 独自の .properties ファイルを解析します:

public class PropertiesUtil {
 private static PropertiesUtil manager = null;
 private static Object managerLock = new Object();
 private Object propertiesLock = new Object();
 private static String DATABASE_CONFIG_FILE = "/path.properties";
 private Properties properties = null;
 public static PropertiesUtil getInstance() {
  if (manager == null) {
   synchronized (managerLock) {
    if (manager == null) {
     manager = new PropertiesUtil();
    }
   }
  }
  return manager;
 }
 private PropertiesUtil() {
 }
 public static String getProperty(String name) {
  return getInstance()._getProperty(name);
 }
 private String _getProperty(String name) {
  initProperty();
  String property = properties.getProperty(name);
  if (property == null) {
   return "";
  } else {
   return property.trim();
  }
 }
 public static Enumeration<?> propertyNames() {
  return getInstance()._propertyNames();
 }
 private Enumeration<?> _propertyNames() {
  initProperty();
  return properties.propertyNames();
 }
 private void initProperty() {
  if (properties == null) {
   synchronized (propertiesLock) {
    if (properties == null) {
     loadProperties();
    }
   }
  }
 }
 private void loadProperties() {
  properties = new Properties();
  InputStream in = null;
  try {
   in = getClass().getResourceAsStream(DATABASE_CONFIG_FILE);
   properties.load(in);
  } catch (Exception e) {
   System.err
     .println("Error reading conf properties in PropertiesUtil.loadProps() "
       + e);
   e.printStackTrace();
  } finally {
   try {
    in.close();
   } catch (Exception e) {
   }
  }
 }
 /**
  * 提供配置文件路径
  *
  * @param filePath
  * @return
  */
 public Properties loadProperties(String filePath) {
  Properties properties = new Properties();
  InputStream in = null;
  try {
   in = getClass().getResourceAsStream(filePath);
   properties.load(in);
  } catch (Exception e) {
   System.err
     .println("Error reading conf properties in PropertiesUtil.loadProperties() "
       + e);
   e.printStackTrace();
  } finally {
   try {
    in.close();
   } catch (Exception e) {
   }
  }
  return properties;
 }
}
ログイン後にコピー

これを使用する前に、名前である DATABASE_CONFIG_FILE 属性に値を付加するだけで済みます。 .properties ファイルを使用すると、クラス名 getProperty("realPath"); を使用して .properties ファイル内のキー realPath の内容を取得できます。

上記は、エディターが紹介した Java 開発における XML およびプロパティ設定ファイルの読み込み方法です。ご質問があれば、メッセージを残してください。編集者が返信します。時間!

Java 開発における XML およびプロパティ設定ファイルの読み取り方法に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート