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");
}
}
读取xml文件
最新推荐文章于 2023-12-04 09:20:40 发布