⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 databasecenter.java

📁 一个基于JSP的在线动物识别系统
💻 JAVA
字号:
package function;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

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 DataBaseCenter {
	private Document doc=null;
	String filename=null;
	public DataBaseCenter(String m_filename){
		filename=m_filename;
		Init();
	}
	public void Init(){
		if(filename==null)
			return;
		File file=new File(filename);
		DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
		DocumentBuilder builder=null;
		//初始化builder
		try {
			builder = factory.newDocumentBuilder();
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//找到file对应的xml数据文件
		try {
			doc=builder.parse(file);
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	private boolean IsAnte(String[] rule1,String[] rule2) {
		int length1=rule1.length;
		int length2=rule2.length;
		if(length1<2||length2<2){
			return false;
		}
		for(int i=0;i<length2-1;i++){
			if(rule1[length1-1].equals(rule2[i])){
				return true;
			}
		}
		return false;
	}
	public synchronized void AddRule(String [] rule){
		
		if(doc==null)
			return ;
		if(ContainsRule(rule))
			return ;
		//获取根元素
		Element rootElement=doc.getDocumentElement();
		boolean stop=false;
		//读取规则
		NodeList children=rootElement.getChildNodes();
		for(int i=0;i<children.getLength();i++){
			Node childNode=children.item(i);
			if(childNode instanceof Element){
				Element childElement=(Element)(childNode);
				NodeList _children=childElement.getElementsByTagName("tuple");
				//条件的总长度
				int num_of_condition=_children.getLength();
				String[] rule2=new String[num_of_condition];
				for(int j=0;j<num_of_condition;j++){
					Node node=_children.item(j);
					Element nodeElement=(Element)(node);
					rule2[j]=nodeElement.getElementsByTagName("val").item(0).getTextContent();
				}
				if(IsAnte(rule, rule2)){//插入中间
					int number=rule.length;
					Element Rule=doc.createElement("rule");
					for(int k=0;k<number;k++){
						Element ruleElement=doc.createElement("tuple");
						
						Element node1=doc.createElement("object");
						node1.setTextContent("动物");
						ruleElement.appendChild(node1);
						
						Element node2=doc.createElement("var");
						node2.setTextContent("特征");
						ruleElement.appendChild(node2);
						
						Element node3 = doc.createElement("val");;
						node3.setTextContent(rule[k]);
						ruleElement.appendChild(node3);	
						
						Rule.appendChild(ruleElement);
					}
					rootElement.insertBefore(Rule, childElement);
					stop=true;
					break;
				}
			}
		}
		if (!stop) {//插入尾部
			int number = rule.length;
			Element Rule = doc.createElement("rule");
			for (int i = 0; i < number; i++) {
				Element ruleElement = doc.createElement("tuple");

				Element node1 = doc.createElement("object");
				node1.setTextContent("动物");
				ruleElement.appendChild(node1);

				Element node2 = doc.createElement("var");
				node2.setTextContent("特征");
				ruleElement.appendChild(node2);

				Element node3 = doc.createElement("val");
				node3.setTextContent(rule[i]);
				ruleElement.appendChild(node3);

				Rule.appendChild(ruleElement);
			}
			rootElement.appendChild(Rule);
		}
		
		//进行修改
		try {
			TransformerFactory tFactory=TransformerFactory.newInstance();
			Transformer transformer=tFactory.newTransformer();
			DOMSource source=new DOMSource(doc);
			StreamResult streamResult=new StreamResult(new File(filename));
			transformer.transform(source, streamResult);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		System.out.println("ok");
	}
	private boolean ContainsRule(String []rule) {
		if(rule==null||rule.length<2){
			return false;
		}
		StringBuffer sBuffer=new StringBuffer();
		int j=rule.length;
		for(int i=0;i<j;i++){
			sBuffer.append(rule[i]);
			if(i!=j-1){
				sBuffer.append(" ");
			}
		}
		ArrayList<String> all=GetAllRules();
		if(all==null){
			return false;
		}
		return all.contains(sBuffer.toString());
	}
	public synchronized ArrayList<String> GetAllRules(){
		if(doc==null)
			return null;
		ArrayList<String> result=null;
		//获取根元素
		Element rootElement=doc.getDocumentElement();
		//读取规则
		NodeList children=rootElement.getChildNodes();
		for(int i=0;i<children.getLength();i++){
			Node childNode=children.item(i);
			if(childNode instanceof Element){
				StringBuffer sBuffer=new StringBuffer();
				Element childElement=(Element)(childNode);
				NodeList _children=childElement.getElementsByTagName("tuple");
				//条件的总长度
				int num_of_condition=_children.getLength();
				for(int j=0;j<num_of_condition;j++){
					Node node=_children.item(j);
					Element nodeElement=(Element)(node);
					String temp=nodeElement.getElementsByTagName("val").item(0).getTextContent();
					sBuffer.append(temp);
					if(j!=num_of_condition-1){
						sBuffer.append(" ");
					}
				}
				if(result==null){
					result=new ArrayList<String>();
				}
				result.add(sBuffer.toString());
			}
		}
		return result;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -