读取xml文件

package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
import test.Course;
import test.Student;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

public class testXML {

	//读取txt文本信息
	private static ArrayList<String> readFile(String filename){
		//设置返回结果
		ArrayList<String> result=new ArrayList<>();
	    /* 读取文件*/
        try {
        	InputStreamReader isr = new InputStreamReader(new FileInputStream(filename), "UTF-8");
        	BufferedReader read = new BufferedReader(isr);
            //BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filename))));//可能会有乱码问题
            String lineTxt = null;
            while ((lineTxt = read.readLine()) != null) {
                result.add(lineTxt);
            }
            read.close();
        } catch (Exception e) {
           e.printStackTrace();
        }
		return result;
		
	}

	
	private static void showMap(Map<String,Student> m){
		for(String s:m.keySet()){
			System.out.println(m.get(s).getStu_id()+" "+m.get(s).getStu_name()+"   ");
			for(Course c:m.get(s).getCourses()){
				System.out.println(c.getCourseName()+"   "+c.getScore());
			}
			System.out.println("---------------------");
		}
	}

	
	
	//将信息写入xml文件
	private static void writeFile(Map<String,Student> m,String filename){
		//创建文档
		Document document=new Document();
		//创建根元素,即students标签
		Element students=new Element("students");
		//根元素加入到document中
		document.addContent(students);
		Element student;
		
		for(String s:m.keySet()){
			//创建学生标签
			student=new Element("student");
			
			//创建学号标签并加入到学生标签内
			Element e_stuid=new Element("学号");
			e_stuid.setText(m.get(s).getStu_id());
			student.addContent(e_stuid);
			
			//创建姓名标签并加入到学生标签内
			Element e_stuname=new Element("姓名");
			e_stuname.setText(m.get(s).getStu_name());
			student.addContent(e_stuname);
			
			//循环创建课程标签并加入到学生标签内
			for(Course c:m.get(s).getCourses()){
				Element e_course=new Element("课程");
				e_course.setAttribute("课程名",c.getCourseName());
				e_course.setText(c.getScore()+"");
				student.addContent(e_course);
			}
			
			//将单个学生标签加入到根标签
			students.addContent(student);
		}	
		//设置xml输出格式
                Format format = Format.getPrettyFormat();
                // format.setEncoding("utf-8");//设置编码
                format.setIndent("    ");//设置缩进
               //得到xml输出流
               XMLOutputter out = new XMLOutputter(format);
               //把数据输出到xml中
               try {
			out.output(document, new FileOutputStream(filename));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}

	
	public static void main(String[] args) {
		ArrayList<String> strs=readFile("D:\\test\\sometxt\\test.txt");
		for(int i=0;i<strs.size();i++)
		{System.out.println(strs.get(i)+"  ");}
		
	
	   Map<String, Student> students=new TreeMap<>(new Comparator<String>() {
		//自定义比较器,TreeMap默认为升序
		    public int compare(String o1, String o2) {
			// TODO Auto-generated method stub
			//降序
			   return o2.compareTo(o1);
		}
	});

	 //定义字符数组
	 		String []info;
	 		//学生学号
	 		String stu_id;

	 		for(int i=0;i<strs.size();i++){
				
				info=strs.get(i).split(",");//根据逗号进行字符串分割信息
				stu_id=info[0];//获取学号
				
				if(!students.containsKey(stu_id)){
					//如果map中还未有学号,创建学生对象
					Student newstu=new Student(stu_id, info[1], new ArrayList<Course>());
					//课程数组加入课程
					newstu.getCourses().add(new Course(info[2], Integer.parseInt(info[3])));
					//加入到map
					students.put(stu_id, newstu);
				}
				else{
					//如果map中已有对象则加入对应学生的课程中即可
					students.get(stu_id).getCourses().add(new Course(info[2], Integer.parseInt(info[3])));
				}
			}
			showMap(students);
			writeFile(students, "D:\\test\\sometxt\\output.xml");

	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值