设为首页 加入收藏

TOP

基于服务器XMLCRUD操作工具类
2019-05-13 13:53:35 】 浏览:126
Tags:基于 服务器 XMLCRUD 操作 工具

考虑减少不必要业务对数据库的影响,将不重要的通告展示交由xml存储,这就有了XMLUtil工具类:

注意写入xml路径问题,单个java文件路径会在src下,这里指定文件路径在tomcat下;然后这个util针对Notice实体开发,可自行修改。

<pre name="code" class="java">package com.dayang.audit.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import net.sf.json.JSONArray;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
 
public class XMLUtil {
    private static String fileURL="notice.xml";
	
    /**
     * 获取XML中所有的通告信息
     * @return
     */
    public static List<Notice> getAllNotice(){
        Document document=getDocument();
        Element rootElement=document.getRootElement();
         
        List<Element> noticeElements=rootElement.elements();
        List<Notice> notices=new ArrayList<Notice>();
        for (Element noticeElement : noticeElements) {
            Notice notice=new Notice();
            notice.setId(noticeElement.attributeva lue("id"));
            notice.setTitle(noticeElement.element("title").getTextTrim());
            notice.setPriority(noticeElement.element("priority").getTextTrim());
            notice.setContent(noticeElement.element("content").getTextTrim());
            notice.setStarttime(noticeElement.element("starttime").getTextTrim());
            notice.setEndtime(noticeElement.element("endtime").getTextTrim());
            notices.add(notice);
        }
        return notices;
    }
    
    /**
     * 条件获取XML中所有的通告信息
     * @return
     */
    public static List<Notice> selectNoticeByTime(String time){
        Document document=getDocument();
        Element rootElement=document.getRootElement();
         
        List<Element> noticeElements=rootElement.elements();
        List<Notice> notices=new ArrayList<Notice>();
        for (Element noticeElement : noticeElements) {
        	System.out.println(noticeElement.element("starttime").getTextTrim());
        	if(noticeElement.element("starttime").getTextTrim().compareTo(time) <= 0 
        			&& noticeElement.element("endtime").getTextTrim().compareTo(time) >= 0){
                Notice notice=new Notice();
                notice.setId(noticeElement.attributeva lue("id"));
                notice.setTitle(noticeElement.element("title").getTextTrim());
                notice.setPriority(noticeElement.element("priority").getTextTrim());
                notice.setContent(noticeElement.element("content").getTextTrim());
                notice.setStarttime(noticeElement.element("starttime").getTextTrim());
                notice.setEndtime(noticeElement.element("endtime").getTextTrim());
                notices.add(notice);
            }
        }
        return notices;
    }
    
    /**
     * 获取某一个Id的信息
     * @return
     */
    public static Notice findById(String id){
        Document document=getDocument();
        Element rootElement=document.getRootElement();
         
        List<Element> noticeElements=rootElement.elements();
        Notice notice=new Notice();
        for (Element noticeElement : noticeElements) {
        	 if(noticeElement.attributeva lue("id").equals(id)){
                notice.setId(noticeElement.attributeva lue("id"));
                notice.setTitle(noticeElement.element("title").getTextTrim());
                notice.setPriority(noticeElement.element("priority").getTextTrim());
                notice.setContent(noticeElement.element("content").getTextTrim());
                notice.setStarttime(noticeElement.element("starttime").getTextTrim());
                notice.setEndtime(noticeElement.element("endtime").getTextTrim());
                return notice;
            }
        }
        return notice;
    }
    
    /**
     * 向XML文件中添加一个notice(不允许为空)
     * @param notice
     */
    public static void add(Notice notice){
        Document document=getDocument();
        Element rootElement=document.getRootElement();
         
        Element noticeElement=rootElement.addElement("notice");
        noticeElement.addAttribute("id",getMaxId()+1+"");
        Element titleElement=noticeElement.addElement("title");
        Element priorityElement=noticeElement.addElement("priority");
        Element contentElement=noticeElement.addElement("content");
        Element starttimeElement=noticeElement.addElement("starttime");
        Element endtimeElement=noticeElement.addElement("endtime");
        titleElement.setText(notice.getTitle());
        priorityElement.setText(notice.getPriority());
        contentElement.setText(notice.getContent());
        starttimeElement.setText(notice.getStarttime());
        endtimeElement.setText(notice.getEndtime());
         
        write2XML(document);
    }
    /**
     * 根据id删除notice
     * @param id
     */
    public static void deleteById(String id){
        Document document=getDocument();
        Element rootElement=document.getRootElement();
         
        List<Element> noticeElements=rootElement.elements("notice");
        for (Element noticeElement : noticeElements) {
            if(noticeElement.attributeva lue("id").equals(id)){
                System.out.println("开始删除.....");
                rootElement.remove(noticeElement);
                System.out.println("删除结束.....");
            }
        }
        write2XML(document);
    }
    /**
     * 修改notice信息
     * @param notice
     */
    public static void update(Notice notice){
        Document document=getDocument();
        Element rootElement=document.getRootElement();
         
        List<Element> noticeElements=rootElement.elements();
        for (Element noticeElement : noticeElements) {
            if(noticeElement.attributeva lue("id").equals(notice.getId())){
                List<Element> elements=noticeElement.elements();
                noticeElement.element("title").setText(notice.getTitle());
                noticeElement.element("priority").setText(notice.getPriority());
                noticeElement.element("content").setText(notice.getContent());
                noticeElement.element("starttime").setText(notice.getStarttime());
                noticeElement.element("endtime").setText(notice.getEndtime());
            }
        }
        write2XML(document);
    }
     
    /**
     * 获取根节点
     * @return rootElement
     */
    public static Document getDocument(){
        try {
            SAXReader saxReader=new SAXReader();
//            InputStream in=XMLUtil.class.getResourceAsStream("/notice.xml");//拿取src下文件
            String filePath = getProjectPath().substring(1)+fileURL;
            File file = new File(filePath);
            if(!file.exists()){
            	String oldPath =getSrcPath()+fileURL;
            	copyFile(oldPath, filePath);
            }
            System.out.println(filePath);
            InputStream in=new FileInputStream(filePath);
            Document document=saxReader.read(in);
             
            return document;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
    /**
     * 把内容写到XML文件中
     * @param document
     */
    public static void write2XML(Document document){
        try {
            OutputFormat format=new OutputFormat("  ", true, "utf-8");
            format.setTrimText(true);
            XMLWriter writer = new XMLWriter(format);
            
            writer.setOutputStream(new FileOutputStream(getProjectPath()+fileURL));
//            writer.setOutputStream(new FileOutputStream("src/"+fileURL));
            writer.write(document);
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
    /**
     * 获取xml文件中noticeId的最大值
     * @return int
     */
    public static int getMaxId(){
        int maxId=0;
        Document document=getDocument();
        Element rootElement=document.getRootElement();
        List<Element> noticeElements=rootElement.elements();
        for (Element element : noticeElements) {
            int id=Integer.valueOf(element.attributeva lue("id"));
            if(maxId<id){
                maxId=id;
            }
        }
        return maxId;
    }
    
    /**
	 * 得到工程的物理路径(例如:D:/Workspaces/)
	 * @return
	 * @throws Exception
	 */
	public static String getProjectPath() {
		String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
        System.out.println(path);
        path = path.replace("file:/", "");
        path = path.replace("WEB-INF/classes/", "");
        path = path.replace("WebContent/", "");
        path = path.replace("CCTVCensorAndroid/", "");
        path = path.replace("%20", " ");
//        path+="\\CCTVCensorAndroid\\WEB-INF\\classes\\";
		return path;
	}
	
	/**
	 * 得到项目src路径(例如:/D:/lgl/Workspaces/CCTVCensorAndroid/WebContent/WEB-INF/classes/notice.xml)
	 * @return
	 * @throws Exception
	 */
	public static String getSrcPath() {
		String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
		System.out.println(path);
		path = path.replace("file:/", "");
		path = path.replace("%20", " ");
		return path;
	}
	
	/**
	 * 复制单个文件
	 * 
	 * @param oldPath
	 *            String 原文件路径 如:c:/fqf.txt
	 * @param newPath
	 *            String 复制后路径 如:f:/fqf.txt
	 * @return boolean
	 */
	public static void copyFile(String oldPath, String newPath) {
		try {
			int bytesum = 0;
			int byteread = 0;
			File oldfile = new File(oldPath);
			if (oldfile.exists()) { // 文件存在时
				InputStream inStream = new FileInputStream(oldPath); // 读入原文件
				FileOutputStream fs = new FileOutputStream(newPath);
				byte[] buffer = new byte[1444];
				int length;
				while ((byteread = inStream.read(buffer)) != -1) {
					bytesum += byteread; // 字节数 文件大小
					fs.write(buffer, 0, byteread);
				}
				inStream.close();
			}
		} catch (Exception e) {
			System.out.println("复制单个文件操作出错");
			e.printStackTrace();
		}
	}

    public static void main(String[] args) {
//    	Notice nd = new Notice();
//    	nd.setTitle("程序测试2");
//    	nd.setPriority("低2");
//    	nd.setContent("低2");
//    	nd.setStarttime("20160709");
//    	nd.setEndtime("20160712");
//    	add(nd);
//    	Notice ns = new Notice();
//    	ns.setId("3");
//    	ns.setTitle("程序测试1");
//    	ns.setPriority("低1");
//    	ns.setContent("低1");
//    	ns.setStarttime("20160709");
//    	ns.setEndtime("20160712");
//    	update(ns);
//    	deleteById("4");
		List<Notice> notices = getAllNotice();
		JSONArray fromObject = JSONArray.fromObject(notices);
		System.out.println(fromObject.toString());
		for(Notice n : notices){
			System.out.println(n.toString());
		}
	}
}

xml文件格式:

<xml version="1.0" encoding="utf-8">

<notice>
  <notice id="1">
    <starttime>20160705</starttime>
    <endtime>20160708</endtime>
    <title>测试</title>
    <priority>高</priority>
    <content>下发通知单</content>
  </notice>
</notice>
notice实体大纲:

	private String id;
	private String title;
	private String priority;
	private String content;
	private String starttime;
	private String endtime;


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spark 操作Hbase 对表的操作:.. 下一篇函数作用域链

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目