批量xml格式文件按字段順序轉json文件

環境:Eclipse4.4+jdk1.7+Maven3
參考鏈接:http://blog.csdn.net/jkxqj/article/details/76977280
根據需要略有改動。

package test;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

import com.alibaba.fastjson.JSONObject;

public class Xml2JsonUtil {  
    /** 
     * 轉換一個xml格式的字符串到json格式 
     * @param xml    xml格式的字符串 
     * @return 成功返回json 格式的字符串;失敗反回null 
     */  
    public static  String xml2JSON(String xml) {  
        JSONObject obj = new JSONObject();  
        try {  
            InputStream is = new ByteArrayInputStream(xml.getBytes("utf-8"));  
            SAXBuilder sb = new SAXBuilder();  
            Document doc = sb.build(is);  
            Element root = doc.getRootElement();  
            obj.put(root.getName(), iterateElement(root));  
            return obj.toString();  
        } catch (Exception e) {  
            e.printStackTrace();  
            return null;  
        }  
    }  

    /** 
     * 轉換一個xml格式的字符串到json格式 
     * @param file     java.io.File實例是一個有效的xml文件 
     * @return 成功反回json 格式的字符串;失敗反回null 
     */  
    public static String xml2JSON(File file) {  
        JSONObject obj = new JSONObject();  
        try {  
            SAXBuilder sb = new SAXBuilder();  
            Document doc = sb.build(file);  
            Element root = doc.getRootElement();  
            obj.put(root.getName(), iterateElement(root));  
            return obj.toString();  
        } catch (Exception e) {  
            e.printStackTrace();  
            return null;  
        }  
    }  

    /** 
     * 一個迭代方法 
     * @param element 
     *  org.jdom.Element 
     * @return java.util.Map 實例 
     */  
    @SuppressWarnings("unchecked")  
    private static Map  iterateElement(Element element) {  
        List jiedian = element.getChildren();  
        Element et = null;  
        Map obj = new LinkedHashMap();  //LinkedHashMap:是有序的,按xml格式的順序解析;HashMap:是無序的
        List list = null;  
        for (int i = 0; i < jiedian.size(); i++) {  
            list = new LinkedList();  
            et = (Element) jiedian.get(i);  
            if (et.getTextTrim().equals("")) {  
    /*            if (et.getChildren().size() == 0)  
                    continue;  */
                if (obj.containsKey(et.getName())) {  
                    list = (LinkedList) obj.get(et.getName());  
                }  
                list.add(iterateElement(et));  
                obj.put(et.getName(), list);  
            } else {  
                if (obj.containsKey(et.getName())) {  
                    list = (LinkedList) obj.get(et.getName());  
                }  
                list.add(et.getTextTrim());  
                obj.put(et.getName(), list);  
            }  
        }  
        return obj;  
    }  

    public static void readToBuffer(StringBuffer buffer, String filePath) throws IOException {
        InputStream is = new FileInputStream(filePath);
        String line; // 用來保存每行讀取的內容
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        line = reader.readLine(); // 讀取第一行
        while (line != null) { // 如果 line 爲空說明讀完了
            buffer.append(line); // 將讀到的內容添加到 buffer 中
            buffer.append("\n"); // 添加換行符
            line = reader.readLine(); // 讀取下一行         
        }
        reader.close();
        is.close();
    }

    /**
     * 讀取文本文件內容
     * @param filePath 文件所在路徑
     * @return 文本內容
     * @throws IOException 異常
     */
    public static String readFile(String filePath) throws IOException {
        StringBuffer sb = new StringBuffer();
        Xml2JsonUtil.readToBuffer(sb, filePath);
        return sb.toString();
    }

    //寫字符串到文件
    public static void WriteStringToFile(String filePath,String s) {  
        try {  
            File file = new File(filePath);  
            PrintStream ps = new PrintStream(new FileOutputStream(file));  
            ps.println(s);// 往文件裏寫入字符串
            ps.close();
            //ps.append("http://www.docin.com/p-315288370.html");// 在已有的基礎上添加字符串  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        }  
    }  


    public static void getFile(String path) throws IOException{   
        File file = new File(path);   
        File[] array = file.listFiles();   
        System.out.println("一共"+array.length+"個文件");
        for(int i=0;i<array.length;i++){   
            if(array[i].isFile()){  

                System.out.println("搜索到文件:" + array[i].getName());   
                String newName=array[i].getName().substring(0, array[i].getName().indexOf("."))+".json";
                String json=Xml2JsonUtil.xml2JSON(Xml2JsonUtil.readFile(array[i]+"")); 
                //因爲不需要根節點,所以替換掉了一些字符
                json = json.replace("[{}]", "\"\"");
                json = json.replace("{\"ROWDATA\":{\"ROW\":[", "");
                json = json.replace("]}}", "");
                json = json.replace("},{", "}\n{");
                json = json.replace("[", "");
                json = json.replace("]", "");
                Xml2JsonUtil.WriteStringToFile("D:/新json/"+newName,json);
                //Xml2JsonUtil.WriteStringToFile("D:/測試json文件/"+newName,json);
            }else if(array[i].isDirectory()){   
                getFile(array[i].getPath());   
            }   
        }  
    }   

    public static boolean createDir(String destDirName) {  
        File dir = new File(destDirName);  
        if (dir.exists()) {  
            System.out.println("創建目錄" + destDirName + "失敗,目標目錄已經存在");  
            return false;  
        }  
        if (!destDirName.endsWith(File.separator)) {  
            destDirName = destDirName + File.separator;  
        }  
        //創建目錄  
        if (dir.mkdirs()) {  
            System.out.println("創建目錄" + destDirName + "成功!");  
            return true;  
        } else {  
            System.out.println("創建目錄" + destDirName + "失敗!");  
            return false;  
        }  
    }  

    // 測試  
    public static void main(String[] args) throws IOException { 
        //for(int i=1;i<3;i++){

            Xml2JsonUtil.createDir("D:/新json文件");//存放json文件的路徑
            Xml2JsonUtil.getFile("D:/新xml文件/");//遍歷該路徑下的xml文件   
            //Xml2JsonUtil.createDir("D:/測試json文件");
            //Xml2JsonUtil.getFile("D:/測試xml文件/");  
        //}
    }  
}  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章