打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java 三种读取配置文件的方式

方式一:采用ServletContext读取,读取配置文件的realpath,然后通过文件流读取出来。因为是用ServletContext读取文件路径,所以配置文件可以放入在web-infoclasses目录中,也可以在应用层级及web-info的目录中。文件存放位置具体在eclipse工程中的表现是:可以放在src下面,也可放在web-infowebroot下面等。因为是读取出路径后,用文件流进行读取的,所以可以读取任意的配置文件包括xmlproperties。缺点:不能在servlet外面应用读取配置信息。

具体举例如下:

//ServletContext.getRealPath(name)读取路径

    privatevoid test1(HttpServletRequest request, HttpServletResponseresponse)

    throws ServletException,IOException {

       //response.setContentType("text/html;charset=utf-8");

       String path = "/WEB-INF/jdbc_connection.properties"//读取WEB-INF中的配置文件

       String realPath = getServletContext().getRealPath(path);//getServletContext()相当于http://localhost/demo05

//所以后面的path只需要以应用demo/开头具体的部署目录路径即可,如上面的/web-in…

       System.out.println(realPath);

       InputStreamReader reader = new InputStreamReader(newFileInputStream(realPath),"utf-8");

       Properties props = new Properties();

       props.load(reader); //load个人建议还是用Reader来读,因为reader体系中有个InputStreamReader可以指定编码

       String jdbcConValue = props.getProperty("jdbc_con");

       System.out.println(jdbcConValue);

       System.out.println("加载src包下的资源------------------------");

       path = "/WEB-INF/classes/com/test/servlet/jdbc_connection.properties"//读取WEB-INF中的配置文件

        realPath=getServletContext().getRealPath(path);

       System.out.println(realPath);

       reader = new InputStreamReader(new FileInputStream(realPath),"utf-8");

       props.load(reader); //load个人建议还是用Reader来读,因为reader体系中有个InputStreamReader可以指定编码

       jdbcConValue = props.getProperty("jdbc_con");

       System.out.println("second::"+jdbcConValue);

      

    }

方式二:采用ResourceBundle类读取配置信息,此种方式的优点是:可以以完全限定类名的方式加载资源后,直接的读取出来,且可以在非Web应用中读取资源文件。缺点:只能加载类classes下面的资源文件且只能读取.properties文件。若资源文件的编码是utf-8等其它的非is0-8859-1的编码时,需要将读取出来的value先进行getBytes(“iso-8859-1”)编码得到原文,而用newString(bs[],”utf-8”)进行解码。

具体举例如下:

//ResourceBundler读取资源

    privatevoid test2(HttpServletRequest request, HttpServletResponseresponse)throws ServletException, IOException {

       //读取src下面包的配置文件,似乎没有什么好办法可以读取Bundle中是utf-8编码的资源文件

       ResourceBundlerb = ResourceBundle.getBundle("com.test.servlet.jdbc_connection");

       String jdbcConValue = rb.getString("jdbc_con");

       System.out.println(jdbcConValue);//呵呵,搞定了。资源文件中是utf-8编码的,但是ResourceBundler默认是按iso-8859-1解码的

       byte[] buf = jdbcConValue.getBytes("iso-8859-1");//所以读取到了,要用iso-8859-1进行解码得到原本的byte后,再用utf-8进行编码

      

       System.out.println(new String(buf,"utf-8")); //这里再用utf-8进行解码就Ok.

      

    }

方式三:采用ClassLoader方式进行读取配置信息,此种方式的优点是:可以在非Web应用中读取配置资源信息,可以读取任意的资源文件信息。缺点:只能加载类classes下面的资源文件。

         具体举例如下:

         //ClassLoader读取资源

    privatevoid test3(HttpServletRequest request, HttpServletResponseresponse)throws ServletException, IOException {

       ClassLoader cl = ServletReadConfig.class.getClassLoader();

       InputStream in = cl.getResourceAsStream("com/test/servlet/jdbc_connection.properties");

       Properties props = new Properties();

       props.load(in); //load个人建议还是用Reader来读,因为reader体系中有个InputStreamReader可以指定编码

       String jdbcConValue = props.getProperty("jdbc_con");

       byte[] resoucreBytes = jdbcConValue.getBytes("iso-8859-1");

       System.out.println(new String(resoucreBytes,"utf-8"));

       System.out.println("----------ClassLoader读取资源读取,用Reader来传递进Properties---------------");

       InputStream in2 = cl.getResourceAsStream("com/test/servlet/jdbc_connection.properties");

       Reader reader = new InputStreamReader(in2,"utf-8"); //直接用转换流来搞定

       Properties props2 = new Properties();

       props2.load(reader);

       jdbcConValue = props2.getProperty("jdbc_con");

       System.out.println(jdbcConValue);

    }

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java io --- Reader类
解決BufferedReader读取UTF
java 读取配置文件2
Java程序中的配置文件的存放和读取
UTF-8, UTF-16, UTF-16LE, UTF-16BE的区别
java 繁体中文处理完全攻略 -- 简体中文参照操作即可
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服