关于XML文件的写入数据的疑问
老师,我在进行读写xml文件的代码练习时,发现一个难以发现的很奇怪的错误。XML文件数据无误,读写代码也没报错,里面的文件路径也是一样可用的。我在进行读操作的时候很顺利读出了里面所有数据,可是写操作代码不知道是什么原因,第一次运行写入的java文件的时候是可以顺利执行程序的。可是写完之后,我发现XML文件居然变空了,这个时候再次运行读写的java程序会报错,说“文件提前结束”,搞不懂这是啥意思啊?既然读的代码可以顺利把里面的数据读出,说明代码应该没问题啊。
下面是我的代码和文件数据,以及第一次和第二次运行两个java程序的结果
2
收起
正在回答
3回答
同学的代码中,读取xml的代码没有问题,但是在写入xml文件时,应该加上writer.close(),如:
将流关闭的同时,刷新将内容写入xml文件。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
哆丶哆
2019-07-10 16:31:05
package 从网页搭建入门JavaWeb.步骤三JavaWeb入门.XML入门; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class XMLWriter { public static void main(String[] args) { // String file = // "D:/compiling_software/eclipse/eclipse/workspace/慕课网/src/从网页搭建入门JavaWeb/步骤三JavaWeb入门/XML入门/plan.xml"; String file = "src/从网页搭建入门JavaWeb/步骤三JavaWeb入门/XML入门/plan.xml"; SAXReader reader = new SAXReader(); try { Document document = reader.read(file); Element root = document.getRootElement(); Element newElement = root.addElement("course"); Element newElementName = newElement.addElement("course-name"); newElementName.setText("计算机网络"); Element newElementHour = newElement.addElement("calss-hour"); newElementHour.setText("80"); Element newElementForm = newElement.addElement("exam-form"); newElementForm.setText("考试"); newElement.addAttribute("id", "TC004"); Writer writer = new OutputStreamWriter(new FileOutputStream(file), "GBK"); document.write(writer); System.out.println("写入完毕"); } catch (DocumentException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (FileNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }
package 从网页搭建入门JavaWeb.步骤三JavaWeb入门.XML入门; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class XMLreader { public static void main(String[] args) { // String file = "d:/compiling_software/eclipse/eclipse/workspace/慕课网/src/从网页搭建入门JavaWeb/步骤三JavaWeb入门/XML入门/plan.xml"; String file = "src/从网页搭建入门JavaWeb/步骤三JavaWeb入门/XML入门/plan.xml"; SAXReader reader = new SAXReader(); try { Document document = reader.read(file); Element root = document.getRootElement(); List<Element> elements = root.elements("course"); for (Element ele : elements) { Attribute att = ele.attribute("id"); String id = att.getText(); Element name = ele.element("course-name"); String course_name = name.getText(); Element hour = ele.element("class-hour"); String class_hour = hour.getText(); Element form = ele.element("exam-form"); String exam_form = form.getText(); System.out.println("课程ID:" + id); System.out.println("课程名称:" + course_name); System.out.println("课程课时:" + class_hour); System.out.println("考核方式:" + exam_form); } } catch (DocumentException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema"> <element name="teaching-plan"> <complexType> <sequence> <element name="course" maxOccurs="100"> <complexType> <sequence> <element name="course-name" type="string"></element> <element name="class-hour"> <simpleType> <restriction base="integer"> <minInclusive value="20"></minInclusive> <maxInclusive value="110"></maxInclusive> </restriction> </simpleType> </element> <element name="exam-form" type="string"></element> </sequence> <attribute name="id" type="string" use="required"></attribute> </complexType> </element> </sequence> </complexType> </element> </schema>
<?xml version="1.0" encoding="UTF-8"?> <teaching-plan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="plan.xsd"> <course id="TC001"> <course-name>高等数学</course-name> <class-hour>36</class-hour> <exam-form>考试</exam-form> </course> <course id="TC002"> <course-name>计算机二级</course-name> <class-hour>48</class-hour> <exam-form>上机考试</exam-form> </course> <course id="TC003"> <course-name>汇编语言</course-name> <class-hour>106</class-hour> <exam-form>考试</exam-form> </course> </teaching-plan>
2. 从网页搭建入门JavaWeb
- 参与学习 人
- 提交作业 676 份
- 解答问题 9666 个
本阶段将从前端网页搭建入手,到Java Web基础,前后端结合助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星