上一篇博客写到在打开outputStream 时总是报错,而且出现jdom有问题,后来注意到junit提示的一个错误:文件过早关闭。

顾名思义:用getResorceAsStream打开了文件作为输入流,但是又用FileOutputStream 又将该文件作为输出流,导致文件不能作为输入流提供给JDom

这里我是这样实现的:

package com.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List; import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter; public class JdomTest2 { public void changeXml() throws JDOMException, IOException { String path=System.getProperty("java.class.path"); //类路径和包路径
//获取项目根路径并拼接出文件路径
//String filePath=System.getProperty("user.dir")+"\\src\\classes\\test.xml"; String filePath=System.getProperty("user.dir")+"\\src\\test.xml";
System.out.println(filePath);
//获取输入输出流
InputStream inputStream =new FileInputStream(new File(filePath)); //设置解释器类
SAXBuilder sb=new SAXBuilder();
Document doc=sb.build(inputStream);
//获取根元素
Element root=doc.getRootElement();
//获取根元素下标记为disk的所有子元素
List allList=root.getChildren("disk"); for(int i=0;i<allList.size();i++)
{
Element sigElement=(Element)allList.get(i);
System.out.println("name:"+sigElement.getAttributeValue("name"));
System.out.println("capacity:"+sigElement.getChildText("capacity"));
System.out.println();
} //为root添加属性 此时并没有保存到xml文件中
root.setAttribute("id", "24235");
//保存修改到xml文件
XMLOutputter outputter=new XMLOutputter();
outputter.output(doc,new FileOutputStream(filePath));
//OutputStream outputStram =new FileOutputStream(new File());
} }

这里用System.getProperty("user.dir")获取项目目录,然后再拼接到 所需文件,没有用class().getClass().getResourceAsStream()

因为这个会返回一个URL:file:/G:/text.xml(类似这样的URL路径),还得通过substring截取路径,不如拼接

Jdom简单的修改xml文件实现的更多相关文章

  1. Java&Xml教程(七)使用JDOM修改XML文件内容

    JDOM提供了非常灵活的方式操作XML文件,使用JDOM非常简单而且代码简洁可读性强.前面我们学习了如何使用JDOM解析XML文件,本节介绍如何使用JDOM修改XML文件内容. 在这个教程中,我们准备 ...

  2. MyEclipse如何修改XML文件默认行宽

    1.MyEclipse如何修改XML文件默认行宽 Windows--->Preferences--->搜索xml--->XML--->XML Source--->Form ...

  3. MyEclipse如何修改XML文件默认打开的编辑器

    1.MyEclipse如何修改XML文件默认打开的编辑器 Windows--->Preferences--->General--->Editors--->File Associ ...

  4. Java 操纵XML之修改XML文件

    Java 操纵XML之修改XML文件 一.JAVA DOM PARSER DOM interfaces The DOM defines several Java interfaces. Here ar ...

  5. Java&Xml教程(三)使用DOM方式修改XML文件内容

    DOM解析方式也可用于修改XML数据,我们可以使用它完成新增元素.删除元素.修改元素值.修改元素属性等操作. 我们的XML文件,内容如下: employee.xml <?xml version= ...

  6. C#窗体中读取修改xml文件

    由于之前没有操作过xml文件,尤其是在窗体中操作xml,脑子一直转不动,而且很抵制去做这个功能,终于还是突破了自己通过查询资料完成了这个功能,在此记录一下自己的成果. 功能说明:程序中存在的xml文件 ...

  7. DOS 批处理 修改xml文件

    之前对批处理和dos只停留在cd ping ipconfig水平,我以为改个文件应该很简单吧,把文件读出来做个替换再写回去不就欧了,百度个例子改改,那还不是分分钟的事,哪知道事实比想的要复杂的多. 我 ...

  8. C#程序中:如何修改xml文件中的节点(数据)

    要想在web等程序中实现动态的数据内容给新(如网页中的Flash),不会更新xml文件中的节点(数据)是远远不够的,今天在这里说一个简单的xml文件的更新,方法比较基础,很适合初学者看的,保证一看就懂 ...

  9. AutoIt: 如何使用 AutoIt 解析,修改XML 文件

    项目组这次要发布一个项目,需要实施人员根据现场的机器情况,修改项目配置文件的几个节点,为了减轻实施人员的工作负担,我应用AutoIt写了一个小界面,实施人员只需在该界面上点几个按钮,就能够完成文件的配 ...

随机推荐

  1. redis的maxmemory与maxmemory-policy关系

    如果redis配置了maxmemory和maxmemory-policy策略,则当redis内存数据达到maxmemory时,会根据maxmemory-policy配置来淘汰内存数据,以避免OOM.r ...

  2. 补充: istio安装

    首先有一个概念: CRD - Custom Resource Definitions: CRDS文件: install/kubernetes/helm/istio/templates/crds.yml ...

  3. to_char 函数将小数点舍掉的解决办法

    to_char(val,'0.9') 9 代表一个数字 0 强制显示0 $ 放置一个$符 L 放置一个浮动本地货币符 . 显示小数点 , 显示千位指示符

  4. Shell脚本的特性

    bash shell特性 1.命令补全和文件路径补全, 如果写错无法补全 table 2.命令历史记忆功能history 3.别名功能alias.unalias 4.常用快捷键ctrl+u,k,a,e ...

  5. 剖析tcp与udp及应用场景协议方案选择

    什么是TCP和UDP TCP和UDP是TCP/IP协议中的两个传输层协议,它们使用IP路由功能把数据包发送到目的地,从而为应用程序及应用层协议(包 括:HTTP.SMTP.SNMP.FTP和Telne ...

  6. Python处理文本换行符

    源文件每行后面都有回车,所以用下面输出时,中间会多了一行 try: with open("F:\\hjt.txt" ) as f : for line in f: print(li ...

  7. MyEclipse编译报:javaScript Validator错误

    转自:https://blog.csdn.net/lkpmemory/article/details/8833329 Myeclipse编译报错如下: Errors occurred during t ...

  8. 记一次微信小程序开发

    之前在网上看到博客园新闻服务开放接口,因为自己本身有看博客园IT新闻的习惯,为了能随时随地简洁方便的浏览新闻,于是萌生了一个利用开放API开发一个微信小程序的想法. 1. mpvue初探 平时技术栈有 ...

  9. 使用正则表达式读取简单的xml文件

    '<?xml version='1.0' encoding='GB2312'?>'<ntsc>'   <time>'       <year>2010& ...

  10. .NET和UNITY版本问题

    亲测:unity5.5之前:通过VS工程属性查看.NET版本为3.5, 对应unity中没有可查看的项,只有一个Api Compatibility level 是.net subset2.0,看名字, ...