web工程读取自定义xml配置文件的方法

       以前都是在c++中我都是习惯用ini配置文件,接触webx框架后,一般都是用得配置好的xml文件,偷懒结果就是把自己给坑了。在需要自定义配置文件的之后踩到了坑,特此记录下。

        此处我想读取名为test.xml文件中的配置信息。

          


    第一步就是要获取这个文件的路径: 

    千万不要使用System.getProperty("user.dir");

    这java应用中可以获取到的工程目录,但是在web应用中却不行,web应用中用的都是运行时路径,比如用tomcat启动的应用,可能加载test.xml文件时的路径可能就像

    tomcat/deploy/ROOT/WEB-INF/lib/mytest.jar!/

    这时候的路径就和普通的本地java应用的路径不一样。应该利用类加载路径classpath来获取文件路径。比如:

  java.net.URL configUrl= this.getClass().getResource(File.separator+ "aNewTest/test.xml");

    此处File.separator相当于一个左斜杠“/',因为linux环境用的分隔符是”/“,而Windows文件路径中用的风格符是”\“,所以File.separator可以满足兼容性的需要,如下的格式在两种     平台上都适用

扫描二维码关注公众号,回复: 4069443 查看本文章

    java.net.URL configUrl= this.getClass().getResource(File.separator+ "aNewTest"+File.separator+"test.xml");

    获取文件路径还可以用另外一种方式,就是利用classLoader

  java.net.URL configUrl = Thread.currentThread().getContextClassLoader().getResource("aNewTest"+File.separator+"test.xml");
     两种方式有稍微的却别,第二种方式在传入参数的时候字符串开头是不需要 文件分隔符"/"或者“\”,不能弄混淆,否则就会报错找不到文件了。


     第二步就是读取配置文件中的内容:

     利用jdom就可以了,先引包

     

      然后通过第一步中的文件路径读取配置文件

Document document = new SAXBuilder().build(configUrl);//获取文件
Element root = document.getRootElement();//获取到xml文件的根节点元素
Element mytest=root.getChild("test");//通过根节点获取到它的直属子节点test元素
mytest.setText("hello word")//可以给某一个节点设置value
StringWriter writer = new StringWriter();
new XMLOutputter().output(document, writer);//将文档内容写进StringWriter
String temp=writer.toString();//转换成自己想要的字符串
writer.close();

   在使用 new SAXBuilder().build(configUrl)的时候,

   参数最好传入文件的URL地址或者是InputStream对象,如果直接使用文件的字符串地址很容易出错,使用字符串地址如果是硬盘绝对路径那可以运行,否则在web应用中肯定会报错,比如用如下的方式肯定就会报错,千万不要使用

 String configPath= this.getClass().getResource(File.separator + "aNewTest"+File.separator+"test.xml").getPath();
 Document document = new SAXBuilder().build(configPath);
  这样就会报找不到指定文件的error了

   



     

猜你喜欢

转载自blog.csdn.net/u012480148/article/details/52062075