java加载xml配置文件|java 读取和修改本地xml配置文件

1. java加载XML配置文件时报错 org.springframework.beans.factory.CannotLoadBeanClassException

xml的名字写错了,applicationContext.xml

2. java读取配置文件的方法(xml)

#include <XMLDoc.hpp>——相关说明_di_IXMLDocument 为模板类 typedef System::DelphiInterface< IXMLDocument > _di_IXMLDocument;_di_IXMLNode typedef System::DelphiInterface< IXMLNode > _di_IXMLNode;_di_IXMLNodeList 同——类方法 //设置参数void TXXX::setOptions(String name,String value){//创建文档对象_di_IXMLDocument XMLDoc = LoadXMLDocument(L"文件路径");XMLDoc->Active=true;//文档根节点_di_IXMLNode root = XMLDoc->DocumentElement;//想要查找节点_di_IXMLNode tempNode;//调用搜索方法searchXml(name,root,tempNode);// 处理if(tempNode!=NULL)tempNode->SetText(value);XMLDoc->SaveToFile(L"文件路径");}//递归搜索参数节点树void TXXX::searchXml(String name,_di_IXMLNode &Parent_Node,_di_IXMLNode& tempNode){_di_IXMLNode Child_Node; //子结点//子节点列表_di_IXMLNodeList list = Parent_Node->ChildNodes;for(int i=0;i<list->Count;i++){Child_Node = list->Get(i);//递归结束条件if(Child_Node->GetNodeName()==name){tempNode = Child_Node;break;}else{//递归函数searchXml(name,Child_Node,tempNode);}}}

3. JAVA 读取XML文件

import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class XmlTester {public static void main(String[] args) throws DocumentException {// 使用了dom4j解析xml// 读取目录下用来测试的test.xml文件,取得xml主内容Document document = new SAXReader().read(“src/abc/test.xml”).getDocument();int i = 1;// 遍历文档根节点(wuxialist)下的子节点列表,即txtbook节点的集合for(Element txtbook : (List<Element>)document.getRootElement().elements()){//取得txtbook节点下的name节点的内容System.out.println(i+”.”+txtbook.element(“name”).getText());i++; //原来这里少些了这一行,先补上}}}

4. spring中读取xml配置文件、获取bean

读取xml文件

/**

* 利用XmlBeanFactory(Resource resource)

* 这里Resource必须是xml格式

* Resource包括 AbstractResource ClassPathResource FileSystemResource

* InputStreamResource ServletContextResource UrlResource

没滚*/

/*

* 利用 InputStreamResource(InputStream inputStream)

* 要将applicationContext xml放在项目根目录下

*/

InputStream is = null;

try {

is = new FileInputStream( applicationContext xml );

} catch (FileNotFoundException e) {

e printStackTrace();

}

Resource resource = new InputStreamResource(is);

BeanFactory factory = new XmlBeanFactory(resource);

UserDao userDao = (UserDao)factory getBean( userDao );

/*

* 利用 Properties

* 要将bean properties放在类路径--源文件夹(src)目录下

*/

具体见

利用

可以从classpath中读取XML文件

( ) ApplicationContext context = new ( applicationContext xml );

UserDao userDao = (UserDao)context getBean( userDao );

( ) resource = new (new String[]{ applicationContext ibatis oracle xml applicationContext xml applicationContext data oracle xml });

BeanFactory factory = resource;

UserDao userDao = (UserDao) factory getBean( userDao );

利用ClassPathResource

可以从枯铅余classpath中读取XML文件激搜

Resource cr = new ClassPathResource( applicationContext xml );

BeanFactory bf=new XmlBeanFactory(cr);

UserDao userDao = (UserDao)bf getBean( userDao );

加载一个xml文件 springframewonfig PropertyPlaceholderConfigurer不起作用

.利用XmlWebApplicationContext读取

从Web应用程序的文件架构中 指定相对位置来读取定义文件

XmlWebApplicationContext 的建构子无法带参数 参考API文件会发现 预设的location会指向/WEB INF/applicationContext xml档案 使用其 public static属性DEFAULT_CONFIG_LOCATION可取得此预设档名 由于我使用MyEclipse 预设会多一个 /WebRoot 的 目录在WEB INF之前 因此若在web project里有一些与web无关的程式要使用context时(例如处理一些MVC架构中的 M 的部份) 就无法使用 XmlWebApplicationContext来读取bean定义档 因为default location会差一个 WebRoot 的目录

即 使在web xml里面 在DispatcherServlet定义中重新定义contextConfigLocation也一样(此定义可以 override掉XmlWebApplicationContext中的DEFAULT_CONFIG_LOCATION值) 因为与web无关的程式 并不会经过web xml的定义档设定 目前我还没试成功过XmlWebApplicationContext取得bean定义档 使用 反而会快一些

XmlWebApplicationContext ctx = new XmlWebApplicationContext();

ctx setConfigLocations(new String[] { /WEB INF/ applicationContext xml );

ctx setServletContext(pageContext getServletContext());

ctx refresh();

UserDao userDao = (UserDao ) ctx getBean( userDao );

利用FileSystemResource读取

Resource rs = new FileSystemResource( D:/tomcat/webapps/test/WEB INF/classes/ applicationContext xml );

BeanFactory factory = new XmlBeanFactory(rs);

UserDao userDao = (UserDao )factory getBean( userDao );

值得注意的是 利用FileSystemResource 则配置文件必须放在project直接目录下 或者写明绝对路径 否则就会抛出找不到文件的异常

.利用读取

可以指定XML定义文件的相对路径或者绝对路径来读取定义文件

方法一

String[] path={ WebRoot/WEB INF/applicationContext xml WebRoot/WEB INF/applicationContext_task xml };

ApplicationContext context = new (path);

方法二

String path= WebRoot/WEB INF/applicationContext* xml ;

ApplicationContext context = new (path);

方法三

ApplicationContext ctx =

new ( classpath:地址 );

没有classpath的话就是从当前的工作目录

*******************************************************************************

** 分割一下 **

*******************************************************************************

获取Spring框架管理的类实例的方法有多种 如下

方法一 在初始化时保存ApplicationContext对象

代码

ApplicationContext ac = new ( applicationContext xml );

ac getBean( beanId );

说明

这种方式适用于采用Spring框架的独立应用程序 需要程序通过配置文件手工初始化Spring的情况

方法二 通过Spring提供的工具类获取ApplicationContext对象

代码

import sprntext support WebApplicationContextUtils;

ApplicationContext ac =

WebApplicationContextUtils (ServletContext sc)

ApplicationContext ac = WebApplicationContextUtils getWebApplicationContext(ServletContext

sc)

ac getBean( beanId );

ac getBean( beanId );

说明

这种方式适合于采用Spring框架的B/S系统 通过ServletContext对象获取ApplicationContext对象 然后

在通过它获取需要的类实例

上面两个工具方式的区别是 前者在获取失败时抛出异常 后者返回null

方法三 继承自抽象类ApplicationObjectSupport

说明

抽象类ApplicationObjectSupport提供getApplicationContext()方法 可以方便的获取到 ApplicationCont

ext Spring初始化时 会通过该抽象类的setApplicationContext(ApplicationContext

context)方法将ApplicationContext 对象注入

方法四 继承自抽象类WebApplicationObjectSupport

说明

类似上面方法 调用getWebApplicationContext()获取WebApplicationContext

方法五 实现接口ApplicationContextAware

说明

实现该接口的setApplicationContext(ApplicationContext context)方法 并保存ApplicationContext 对

象 Spring初始化时 会通过该方法将ApplicationContext 对象注入

以上方法适合不同的情况 请根据具体情况选用相应的方法

这里值得提一点的是 系统中用到上述方法的类实际上就于Spring框架紧密耦合在一起了 因为这些类是知

道它们是运行在Spring框架上的 因此 系统中 应该尽量的减少这类应用 使系统尽可能的独立于当前运

行环境 尽量通过DI的方式获取需要的服务提供者

lishixin/Article/program/Java/ky/201311/28302

5. java加载spring的XML配置文件,报org.springframework.beans.factory.BeanDefinitionStoreException

file://config/ws/applicationContexte.xml路径没有找到

6. java使用SSM框架做的案例,启动Tomcat后始终报错,提示无法加载applicationContext.xml配置文件!

你现在applicationContext.xml的所在路径是:src/main/resources/applicationContext.xml,你的配置文件classpath:applicationContext.xml代表的路径是src/applicationContext,所以找不到。

7. java 读取和修改本地xml配置文件

你看一下这个吧.不需要导入特别的包,直接用API中的DOM方式解析,并保存的.——————————————————————————————————-import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.io.File;import java.util.HashMap;import java.util.Map;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.w3c.dom.Text;public class XmlApp extends JFrame implements ActionListener, ItemListener {private JTextField textField;private JComboBox comboBox;private Map<String, String> content = null;private Document doc;private String file = "H:\\content.xml";public XmlApp() {getContentPane().setLayout(null);comboBox = new JComboBox();comboBox.setBounds(110, 10, 112, 21);comboBox.addItemListener(this);getContentPane().add(comboBox);textField = new JTextField();textField.setBounds(110, 41, 112, 21);getContentPane().add(textField);textField.setColumns(10);JButton btnSave = new JButton("Save");btnSave.setBounds(252, 40, 93, 23);btnSave.addActionListener(this);getContentPane().add(btnSave);JLabel lblNode = new JLabel("Node");lblNode.setBounds(10, 13, 90, 15);getContentPane().add(lblNode);JLabel lblValue = new JLabel("value");lblValue.setBounds(10, 44, 90, 15);getContentPane().add(lblValue);init();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setResizable(false);setSize(400, 120);setLocationRelativeTo(null);setVisible(true);}public void init() {content = new HashMap<String, String>();DocumentBuilderFactory factory;try {factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();doc = builder.parse(file);loopNodes(doc.getFirstChild(), "", false);textField.setText(content.get(comboBox.getSelectedItem()));} catch (Exception e) {System.out.println("e = " + e.getMessage());}}public void loopNodes(Node node, String name, boolean isSave) {NodeList list = node.getChildNodes();for (int i = 0; i < list.getLength(); i++) {Node tmp = list.item(i);if (tmp instanceof Element) {if (tmp.hasChildNodes()) {loopNodes(tmp, tmp.getNodeName(), isSave);}}if (tmp instanceof Text) {String value = tmp.getNodeValue();if (value != null && !"".equals(value.trim())) {if (isSave) {tmp.setNodeValue(content.get(name));} else {comboBox.addItem(name);content.put(name, value.trim());}}}}}public static void main(String[] args) {new XmlApp();}public void actionPerformed(ActionEvent e) {String value = textField.getText();content.put((String) comboBox.getSelectedItem(), value);loopNodes(doc, "", true);try {TransformerFactory tFactory = TransformerFactory.newInstance();Transformer transformer = tFactory.newTransformer();DOMSource source = new DOMSource(doc);StreamResult result = new StreamResult(new File(file));transformer.transform(source, result);} catch (Exception ex) {System.out.println(ex.getMessage());}}public void itemStateChanged(ItemEvent e) {if (e.getStateChange() == ItemEvent.SELECTED) {textField.setText(content.get(e.getItem()));}}}

8. JAVA技术:XML配置文件的读取处理

Java和XML是黄金组合,网上已经有很多文章介绍,XML作为电子商务中数据交换,已经有其不可替代的作用,但是在平时系统开发中,我们不一定都用到数据交换,是不是无法使用XML了?当然不是,现在已经有一个新趋势,java程序的配置文件都开始使用XML格式,以前是使用类似windows的INI格式。(Java中也有Propertiesy这样的类专门处理这样的属性配置文件)。使用XML作为Java的配置文件有很多好处,从Tomcat的安装配置文件和J2ee的配置文件中,我们已经看到XML的普遍应用,让我们也跟随流行趋旦饥势用XML武装起来。现在关键是如何读取XML配置模余返文件?有好几种XML解析器:主要有DOM和SAX ,这些区别网上文章介绍很多。在apache的XML项目组中,目前有Xerces Xalan Cocoon几个开毁让发XML相关技术的project.Tomcat本身使用的是 Sun 的 JAXP,而其XSL Taglib project中使用Xerces解析器。好了,上面都是比较烦人的理论问题,还是赶快切入XML的配置文件的读取吧。在我们的程序中,通常要有一些根据主机环境确定的变量。比如数据库访问用户名和密码,不同的主机可能设置不一样。只要更改XML配置文件,就可以正常运行。localhostsqlnameusernamepassword上面这个myenv.xml配置文件一般是放在tomcat的WEB-INF/classes目录下。我们编制一个Java程序直接读取,将dbhost dbuser dbpassword提取出来供其他程序访问数据库用。目前使用SAX比较的多,与DOM主要区别是 SAX是一行一行读取XML文件进行分析,适合比较大文件,DOM是一次性读入内存,显然不能对付大文件。这里我们使用SAX解析,由于SAX解析器不断在发展,网上有不少文章是针对老版本的。如果你使用JDK1.4 ,可以参考 使用SAX处理XML文档 一文。这里的程序是根据其改进并且经过实践调试得来的。对上面myenv.xml读取的Java程序:import org.xml.sax.Attributes;import org.xml.sax.helpers.DefaultHandler;import org.xml.sax.SAXException;import java.util.Properties;//使用DefaultHandler的好处 是 不必陈列出所有方法,public class ConfigParser extends DefaultHandler {////定义一个Properties 用来存放 dbhost dbuser dbpassword的值private Properties props;private String currentSet;private String currentName;private StringBuffer currentValue = new StringBuffer();//构建器初始化propspublic ConfigParser() {this.props = new Properties();}public Properties getProps() {return this.props;}//定义开始解析元素的方法. 这里是将中的名称xxx提取出来.public void startElement(String uri, String localName, String qName, Attributes attributes)throws SAXException {currentValue.delete(0, currentValue.length());this.currentName =qName;}//这里是将之间的值加入到currentValuepublic void characters(char[] ch, int start, int length) throws SAXException {currentValue.append(ch, start, length);}//在遇到结束后,将之前的名称和值一一对应保存在props中public void endElement(String uri, String localName, String qName) throws SAXException {props.put(qName.toLowerCase(), currentValue.toString().trim());}}上面的这个解析程序比较简单吧? 其实解析XML就是这么简单。现在我们已经将dbhost dbuser dbpassword的值localhost sqlname username password提取了出来。但是这只是在在解析器内部,我们的程序还不能访问。需要再编制一个程序。import java.util.Properties;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import .URL;public class ParseXML{//定义一个Properties 用来存放 dbhost dbuser dbpassword的值private Properties props;//这里的propspublic Properties getProps() {return this.props;}public void parse(String filename) throws Exception {//将我们的解析器对象化ConfigParser handler = new ConfigParser();//获取SAX工厂对象SAXParserFactory factory = SAXParserFactory.newInstance();factory.setNamespaceAware(false);factory.setValidating(false);//获取SAX解析SAXParser parser = factory.newSAXParser();//得到配置文件myenv.xml所在目录. tomcat中是在WEB-INF/classes//下例中BeansConstants是用来存放xml文件中配置信息的类,可以自己代替或定义URL confURL = BeansConstants.class.getClassLoader().getResource(filename);try{//将解析器和解析对象myenv.xml联系起来,开始解析parser.parse(confURL.toString(), handler);//获取解析成功后的属性 以后 我们其他应用程序只要调用本程序的props就可以提取出属性名称和值了props = handler.getProps();}finally{factory=null;parser=null;handler=null;}}}由于我们的XML文件是使用最简单的形式 ,因此解析器相对简单,但是这已经足够对付我们的配置文件了。

9. 关于java中xml文件配置的路径问题

嗯,是过滤,在这个里面实现了些什么?这个问题太大了,而且这是struts2,更加复杂。在里面做了很多事情,最起码的至少有加载你的struts.xml配置文件,解析你的配置文件,然后通过你的请求路径,找到相应的action,封装你的表单数据等等,还有很多过滤器。。。struts2不是一两句能说完的,看看源代码吧,如果看得懂,就知道做了什么了

10. Java读取配置文件的几种方法

在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据笔者工作中用到的读取配置文件的方法小小总结一下,主要叙述的是spring读取配置文件的方法。一、读取xml配置文件(一)新建一个java beanpackage chb.demo.vo;public class HelloBean {private String helloWorld;public String getHelloWorld() {return helloWorld;}public void setHelloWorld(String helloWorld) {this.helloWorld = helloWorld;}}(二)构造一个配置文件?xml version=”1.0″ encoding=”UTF-8″?!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “”beansbean id=”helloBean” class=”chb.demo.vo.HelloBean”property name=”helloWorld”valueHello!chb!/value/property/bean/beans(三)读取xml文件1.利用ApplicationContext context = new (“beanConfig.xml”);HelloBean helloBean = (HelloBean)context.getBean(“helloBean”);System.out.println(helloBean.getHelloWorld());2.利用FileSystemResource读取Resource rs = new FileSystemResource(“D:/software/tomcat/webapps/springWebDemo/WEB-INF/classes/beanConfig.xml”);BeanFactory factory = new XmlBeanFactory(rs);HelloBean helloBean = (HelloBean)factory.getBean(“helloBean”);System.out.println(helloBean.getHelloWorld());值得注意的是:利用FileSystemResource,则配置文件必须放在project直接目录下,或者写明绝对路径,否则就会抛出找不到文件的异常。二、读取properties配置文拿镇件这里介绍两种启敬技术:利用spring读取properties 文件和利用java.util.Properties读取(一)利用spring读取properties 文件我们还利用上面的HelloBean.java文件,构造如下beanConfig.properties文件:helloBean.class=chb.demo.vo.HelloBeanhelloBean.helloWorld=Hello!chb!属性文件中的”helloBean”名称即是Bean的别名设定,.class用于指定类来消旁粗源。然后利用org.springframework.beans.factory.support.来读取属性文件BeanDefinitionRegistry reg = new DefaultListableBeanFactory(); reader = new (reg);reader.loadBeanDefinitions(new ClassPathResource(“beanConfig.properties”));BeanFactory factory = (BeanFactory)reg;HelloBean helloBean = (HelloBean)factory.getBean(“helloBean”);System.out.println(helloBean.getHelloWorld());(二)利用java.util.Properties读取属性文件比如,我们构造一个ipConfig.properties来保存服务器ip地址和端口,如:ip=192.168.0.1port=8080则,我们可以用如下程序来获得服务器配置信息:InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(“ipConfig.properties”);Properties p = new Properties();try {p.load(inputStream);} catch (IOException e1) {e1.printStackTrace();}System.out.println(“ip:”+p.getProperty(“ip”)+”,port:”+p.getProperty(“port”));


赞 (0)