信息发布软件,b2b软件,广告发布软件

 找回密码
 立即注册
搜索

JAVA技术:XML配置文件的读取处理多方法实例教程

查看数: 1796 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-9-24 08:31

正文摘要:

Java和XML是黄金组合,网上已经有很多文章介绍,XML作为电子商务中数据交换,已经有其不可替代的作用,但是在平时系统开发中,我们不一定都用到数据交换,是不是无法使用XML了?  当然不是,现在已经有一个新趋势 ...

回复

宣传软件 发表于 2016-9-24 08:35:22
多方法实例教程3

一 使用原生方式读取配置文件

1 文件系统加载

Java代码  

  • InputStream in = new FileInputStream("config.properties");        
  • Properties p = new Properties();  
  • p.load(in);  



2 类加载方式

A 与类同级目录
Java代码  

  • InputStream in = Main.class.getResourceAsStream("config.properties");  


B 在类的下一级目录
Java代码  

  • InputStream in =   
  • Main.class.getResourceAsStream("resource/config.properties");  


C 指定加载资源配置文件的classes相对路径
Java代码  

  • InputStream in =   
  • Main.class.getResourceAsStream("/test/resource/config.properties");  


注意事项:如上以/开头的是指从根目录开始加载。

D 使用类加载器的方式
Java代码  

  • InputStream in = Main.class.getClassLoader().  
  • getResourceAsStream("test/resource/config.properties");  


E 资源配置文件在classes下
Java代码  

  • InputStream in =   
  • Main.class.getClassLoader().getResourceAsStream("config.properties");  



二 使用apache提供的功能组件
参照网上相关资料
1 读取properties文件的方式
示例代码

Java代码  

  • import java.util.List;  
  • import org.apache.commons.configuration.Configuration;  
  • import org.apache.commons.configuration.ConfigurationException;  
  • import org.apache.commons.configuration.PropertiesConfiguration;  
  •   
  • public class PropertiesConfigurationDemo {  
  •   
  •     public static void main(String[] args) throws ConfigurationException {  
  •   
  •         Configuration config = new PropertiesConfiguration(PropertiesConfigurationDemo.class.getResource("system-config.properties"));  
  •         String ip = config.getString("ip");         
  •         String[] colors = config.getStringArray("colors.pie");   
  •         for (int i = 0; i < colors.length; i++) {  
  •             System.out.println(colors);  
  •         }  
  •                
  •         List<?> colorList = config.getList("colors.pie");  
  •         for (int i = 0; i < colorList.size(); i++) {  
  •             System.out.println(colorList.get(i));  
  •         }  
  •      }  
  • }  



配置文件代码:

ip=10.10.1.1
colors.pie = #FF0000, #00FF00, #0000FF

2 读取XML文件的方式

Java代码  

  • import java.util.List;  
  • import org.apache.commons.configuration.Configuration;  
  • import org.apache.commons.configuration.ConfigurationException;  
  • import org.apache.commons.configuration.XMLConfiguration;  
  •   
  • public class XMLConfigurationDemo {  
  •   
  •     public static void main(String[] args) throws ConfigurationException {  
  •   
  •         Configuration config = new XMLConfiguration(XMLConfigurationDemo.class  
  •                 .getResource("system-config.xml"));  
  •         String ip = config.getString("ip");  
  •         String account = config.getString("account");  
  •         String password = config.getString("password");  
  •         List<?> roles = config.getList("roles.role");  
  •         System.out.println("IP: " + ip);  
  •         System.out.println("Account: " + account);  
  •         System.out.println("Password: " + password);         
  •         for (int i = 0; i < roles.size(); i++) {  
  •             System.out.println("Role: " + roles.get(i));  
  •         }         
  •     }  
  • }  



Xml文件代码:
Xml代码  

  • <config>  
  •     <ip>10.10.1.1</ip>  
  •     <account>jini</account>  
  •     <password>jakarta99</password>  
  •     <roles>  
  •         <role>admin</role>  
  •         <role>manager</role>  
  •         <role>user</role>  
  •     </roles>  
  • </config>  



示例2

Java代码  

  • import org.apache.commons.configuration.Configuration;  
  • import org.apache.commons.configuration.ConfigurationException;  
  • import org.apache.commons.configuration.XMLConfiguration;  
  • public class XmlConfigurationExample {  
  •     public static void main(String[] args) throws Exception,  
  •             ConfigurationException {  
  •         String resource = "main/global.xml";  
  •         Configuration config = new XMLConfiguration(resource);  
  •         // 只有new一个XMLConfiguration的实例就可以了.  
  •         List<?> startCriteria = config.getList("start-criteria.criteria");         
  •         for (int i = 0; i < startCriteria.size(); i++) {  
  •             System.out.println("Role: " + startCriteria.get(i));  
  •         }  
  •         int horsepower = config.getInt("horsepower");  
  •         System.out.println(horsepower);  
  •     }  
  • }  


global.xml文件代码
Xml代码  

  • <?xml version="1.0" encoding="ISO-8859-1" ?>  
  • <engine-config>  
  •     <start-criteria>  
  •         <criteria>  
  •             Temperature Above -10 Celsius   
  •         </criteria>  
  •         <criteria>  
  •             Fuel tank is not empty   
  •        </criteria>  
  •     </start-criteria>  
  •     <volume>4 Liters</volume>  
  •     <horsepower>42</horsepower>  
  • </engine-config>  



示例3:混合读取二种文件

Java代码  

  • import java.util.List;  
  • import org.apache.commons.configuration.CompositeConfiguration;  
  • import org.apache.commons.configuration.ConfigurationException;  
  • import org.apache.commons.configuration.PropertiesConfiguration;  
  • import org.apache.commons.configuration.XMLConfiguration;  
  •   
  • public class Test {  
  •       
  •     public static void main(String[] args) throws ConfigurationException {  
  •         CompositeConfiguration config = new CompositeConfiguration();  
  •         config.addConfiguration(new PropertiesConfiguration(  
  •         "main/global.properties"));  
  •         config.addConfiguration(new XMLConfiguration("main/global.xml"));  
  •          
  •         List<?> startCriteria = config.getList("start-criteria.criteria");  
  •         int horsepower = config.getInt("horsepower");  
  •         for (int i = 0; i < startCriteria.size(); i++) {  
  •             System.out.println("Role: " + startCriteria.get(i));  
  •         }  
  •         System.out.println(horsepower);  
  •         System.out.println("Speed: " + config.getFloat("speed"));  
  •         System.out.println("Names: " + config.getString("name"));  
  •     }  
  • }  


Xml如上所示,global.properties文件如下:
speed=50
name=Default User

示例4
Java代码  

  • import java.net.URL;  
  • import java.util.List;  
  • import org.apache.commons.configuration.Configuration;  
  • import org.apache.commons.configuration.ConfigurationFactory;  
  • public class PropertiesXmlConfigurationExample {  
  •       
  •     public static void main(String[] args) throws Exception {            
  •         ConfigurationFactory factory = new ConfigurationFactory();  
  •         URL configURL = PropertiesXmlConfigurationExample.class.getResource("additional-xml-configuration.xml");  
  •         factory.setConfigurationURL(configURL);  
  •         Configuration config = factory.getConfiguration();  
  •         List<?> startCriteria = config.getList("start-criteria.criteria");  
  •         for (int i = 0; i < startCriteria.size(); i++) {  
  •             System.out.println("Role: " + startCriteria.get(i));  
  •         }  
  •         int horsepower = config.getInt("horsepower");  
  •         System.out.println("Horsepower: " + horsepower);  
  •          
  •         System.out.println("Speed: " + config.getFloat("speed"));  
  •         System.out.println("Names: " + config.getString("name"));  
  •          
  •     }  
  • }  



additional-xml-configuration.xml文件内容:
Xml代码  

  • <?xml version="1.0" encoding="ISO-8859-1" ?>   
  • <configuration>   
  • <properties fileName="global.properties"/>   
  • <xml fileName="global.xml"/>  
  • </configuration>  


相关API说明:
# PropertiesConfiguration 从一个 property 文件中加载配置 .
# XMLConfiguration 从 XML 文件中加载配置信息 .
# XMLPropertyListConfiguration 也可以读取 XML 被 Mac OSX 使用变量 .
# JNDIConfiguration 利用 jndi 树的一个键值,可以返回一个值,这个值来作为配置信息
# BaseConfiguration 访问内存中的一个配置对象 .
# HierarchicalConfiguration 一个在内存中的配置对象,这个对象可以处理复杂的数据结构 .
# SystemConfiguration 一个利用系统属性的配置信息
# ConfigurationConverter 把 java.util.Properties 或者 org.apache.collections.commons.ExtendedProperties 转化为一个 Configuration 对象
宣传软件 发表于 2016-9-24 08:33:05
多方法实例1

一、使用org.apache.commons.configuration

需要使用的是jar包:commons-collections-3.2.1.jar、commons-configuration-1.10.jar、commons-lang-2.6.jar和commons-logging-1.2.jar。

可以读取的配置文件:xml和properties

1、读取xml文件


[java] view plain copy


  • <span style="font-family:Microsoft YaHei;font-size:12px;">package com.styspace;  
  •   
  • import org.apache.commons.configuration.Configuration;  
  • import org.apache.commons.configuration.ConfigurationException;  
  • import org.apache.commons.configuration.XMLConfiguration;  
  • public class xmlLoaderTest {  
  •   
  •     public static void main(String[] args) throws ConfigurationException{  
  •        Configuration config = new XMLConfiguration("com/styspace/config.xml");  
  •        String name = config.getString("Account.name");  
  •        System.out.println("name:" + name);  
  •     }  
  • }  
  • </span>  

需要注意的是config.getString(“Account.name”)中的参数是Account.name,这个参数是XPath格式的,而且不能包含xml中的根元素。

使用到的config.xml内容如下:


[html] view plain copy


  • <span style="font-family:Microsoft YaHei;font-size:12px;"><?xml version="1.0" encoding="gbk"?>         
  • <Accounts>   
  •     <Account type="by0003">   
  •         <code>100001</code>   
  •         <pass>123</pass>   
  •         <name>李四</name>   
  •         <money>1000000.00</money>   
  •     </Account>   
  • </Accounts></span>  




2、读取properties文件


[java] view plain copy


  • <span style="font-family:Microsoft YaHei;font-size:12px;">package com.styspace;  
  •   
  • import org.apache.commons.configuration.Configuration;  
  • import org.apache.commons.configuration.ConfigurationException;  
  • import org.apache.commons.configuration.PropertiesConfiguration;  
  •   
  • public class peropertiesLoaderTest {  
  •   
  •     public static void main(String[] args) throws ConfigurationException{  
  •        Configuration config = new PropertiesConfiguration("com/styspace/config.properties");  
  •        String name = config.getString("name");  
  •        System.out.println("name:" + name);  
  •     }  
  • }  
  • </span>  

使用到的config.properties文件内容如下:

[plain] view plain copy


  • <span style="font-family:Microsoft YaHei;font-size:12px;">threads.max=50threas.min=2  
  • timout=15.52  
  • interactive=true  
  • color=red  
  • speed=50  
  • name=Default User</span>  


二、使用java.util.Properties读取


[java] view plain copy


  • <span style="font-family:Microsoft YaHei;font-size:12px;">package com.styspace;  
  •   
  • import java.io.IOException;  
  • import java.io.InputStream;  
  • import java.util.Properties;  
  •   
  • public class PropertiesTest {  
  •     public static void main(String[] args){  
  •         PropertiesTest pt = new PropertiesTest();  
  •         try {  
  •             pt.getProperties();  
  •         } catch (IOException e) {  
  •             // TODO Auto-generated catch block  
  •             e.printStackTrace();  
  •         }  
  •     }  
  •       
  •     private void getProperties() throws IOException {  
  •         InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("com/styspace/config.properties");  
  •         System.out.println("begin!!!");  
  •         Properties properties = new Properties();  
  •         try{  
  •             properties.load(inputStream);  
  •         }catch (IOException ioE){  
  •             ioE.printStackTrace();  
  •         }finally{  
  •             inputStream.close();  
  •         }  
  •         System.out.println("name:"+properties.getProperty("name"));  
  •     }  
  • }  
  • </span>  

需要注意的是hetClassLoader().getResourceAsStream()的参数是项目根目录下的路径,尽管config.properties是该该类文件在相同的目录下,但是不能写成getClassLoader().getResourceAsStream("config.properties"),这样程序会报错,得到的InputStream是null值。


ClassLoader()和URLClassLoader()区别:ClassLoader()只能查找src目录下的文件,而URLClassLoader()则能查找任意目录下的文件。


三、spring中配置文件的读取

1、ClassPathXmlApplicationContext:从类路径中加载。

2、FileSystemXmlApplicationContext:从文件系统加载。

3、XmlWebApplicationContext:从web系统中加载。

1、使用bean工厂获取bean


[java] view plain copy


  • <span style="font-family:Microsoft YaHei;font-size:12px;">    BeanFactory factory = null; //声明  
  •       
  •     ClassPathResource resource = new ClassPathResource("spring.xml");//类路径  
  •     factory= new XmlBeanFactory(resource);   
  •       
  •     FileSystemResource fileSystemResource = new FileSystemResource("D:\\Ncode\\mcode\\sday02\\src\\spring.xml");//文件路径  
  •     factory= new XmlBeanFactory(fileSystemResource);   
  •       
  •     //XmlBeanFactory(参数可以是resource或者fileSystemResource等  
  •     //但是不能是 res 原因可以查看:文档Part III. Core Technologies 6. Resources  
  •     //中6.2 The Resource interface 有关isOpen方法的说明);  
  •     //InputStreamResource res = new InputStreamResource(new FileInputStream("D:\\Ncode\\mcode\\sday02\\src\\spring.xml"));//系统路径  
  •   
  •     HelloService helloService = factory.getBean("helloServiceImpl", HelloServiceImpl.class);  
  •     helloService.sayHello();</span>  


2、使用上下文(Context)

上下文更加高级:提供文本信息解析工具,包括对国际化支持;提供载入文件资源的通用方法,如图片;可以向注册为监听器的bean发送事件。

在很少的情况下,使用BeanFactory。


[java] view plain copy


  • <span style="font-family:Microsoft YaHei;font-size:12px;">    //从文件系统  
  •     ApplicationContext context = new FileSystemXmlApplicationContext("file:\\Ncode\\mcode\\sday02\\src\\spring.xml");  
  •     //从类路径  
  •     ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml");  
  •       
  •     HelloService helloService =  context.getBean("helloServiceImpl", HelloServiceImpl.class);  
  •     helloService.sayHello();</span>  


3、在web应用中使用

3.1、使用XmlWebApplicationContext


[java] view plain copy


  • XmlWebApplicationContext context = new XmlWebApplicationContext();   
  • //默认的路径/WEB-INF/applicationContext.xml  
  • //applicationContext.xml文件名称 可以任意起  
  • //重新设置路径  
  • //context.setConfigLocations(new String[] {"/WEB-INF/classes/applicationContext.xml"});   
  • //设置ServletContext上下下文为web应用程序的上下文  
  • context.setServletContext(getServletContext());  
  • //刷新  
  • context.refresh();  
  • //根据id名称获取  
  • HelloDao helloDao = context.getBean("helloDaoImpl", HelloDaoImpl.class);  
  • //执行helloDao对象的方法  
  • helloDao.sayHello();  

3.2、使用WebApplicationContextUtils工具类

[java] view plain copy


  • //直接采用getWebApplicationContext(getServletContext()) 获取context对象  
  • WebApplicationContext  context=   
  • WebApplicationContextUtils.getWebApplicationContext(getServletContext());  
  • //context = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());  
  • System.out.println(context);  
  • HelloDao helloDao = context.getBean("helloDaoImpl", HelloDaoImpl.class);  
  • helloDao.sayHello()  

两者的区别是:

1、当采用getWebApplicationContext(getServletContext())获取context对象的时候,输出的context对象为null  所以在使用

context.getBean("helloDaoImpl", HelloDaoImpl.class);会出现空指针的异常

   2、当采用getRequiredWebApplicationContext(getServletContext());获取context对象的时候 会出现如下bug

java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered


QQ|( 京ICP备09078825号 )

本网站信息发布软件,是可以发布论坛,发送信息到各大博客,各大b2b软件自动发布,好不夸张的说:只要手工能发在电脑打开IE能发的网站,用这个宣传软件就可以仿制动作,进行推送发到您想发送的B2B网站或是信息发布平台上,不管是后台,还是前台,都可以进行最方便的广告发布,这个广告发布软件,可以按月购买,还可以试用软件,对网站的验证码也可以完全自动对信息发布,让客户自动找上门,使企业轻松实现b2b发布,这个信息发布软件,均是本站原创正版开发,拥有正版的血统,想要新功能,欢迎提意见给我,一好的分类信息群发软件在手,舍我其谁。QQ896757558

GMT+8, 2024-5-7 00:45 , Processed in 0.334612 second(s), 46 queries .

宣传软件--信息发布软件--b2b软件广告发布软件

快速回复 返回顶部 返回列表