关于ClassLoader.getResouce打包配置文件放外面的方法
来源:互联网 发布:淘宝买手办从哪进货 编辑:程序博客网 时间:2024/06/09 14:22
实际上都是抄的,但是看了很多归纳了一下
这篇文章主要解决动态路径访问的问题,打jar包找配置文件问题,相对src目录读取其他位置文件问题
如果你仔细看,这几个问题都能解决
Class.getResource与Class.getClassLoader.getResource
这两个getResource()是使用当前ClassLoader加载资源(即资源在 Class path中),这样资源和class直接打在jar包中,避免文件路径问题.
两者不同是Class的getResource()方法是从当前.class文件路径查找资源,ClassLoader则是从jar包根目录查找.
注意:针对WEB的javaEE项目和javaSE项目,路径也是有所不同的。
下面是代码的例子,注意"/"的使用
package com.chinaso.phl;/** * @author piaohailin * @date 2013-12-16*/public class Main { public static void main(String[] args) { System.out.println(Main.class.getResource("a.txt")); System.out.println(Main.class.getResource("/a.txt")); System.out.println(Main.class.getResource("/")); System.out.println(Main.class.getResource("b.txt")); // need to add resource/b.txt to build path! it will be package in jar file System.out.println(Main.class.getClassLoader().getResource("b.txt")); System.out.println(Main.class.getClassLoader().getResource("/")); System.out.println(Thread.currentThread().getContextClassLoader().getResource("b.txt")); }}eclipse中的输出结果
file:/I:/project/eclipse3.6/java.getResource/bin/com/chinaso/phl/a.txt
null
file:/I:/project/eclipse3.6/java.getResource/bin/
null
file:/I:/project/eclipse3.6/java.getResource/bin/b.txt
null
file:/I:/project/eclipse3.6/java.getResource/bin/b.txt
打包以后输出的结果
C:\my>java -classpath my.jar;b.txt com.chinaso.phl.Main
jar:file:/C:/my/my.jar!/com/chinaso/phl/a.txt
null
null
null
jar:file:/C:/my/my.jar!/b.txt
null
jar:file:/C:/my/my.jar!/b.txt
先不说这运行结果是否跟上面相同。但是仔细看,打jar包和打包后的输出路径不一致,这就说明,打包的时候要注意这些东西。免得出错。
另外这样表示,可能仅仅表示出了路径。
再仔细看看有的只有路径,有的却在前面有个file:这个东西,这个很重要,它表示这是一个文件,而不是路径
所以容易犯这样的错误,就是直接指向文件,但是没加file而出错。
String pathString="file:"+System.getProperty("user.dir");
这句话指输出是file:D:\java\workspace\myapp\com.app.test 直接定位到你程序的目录,配置文件放在附近就能读到
这个就能表示你现在想指向的文件的路径设置,是相对于你现在class文件锁放的位置,可以把它打印出来看看。
打包时候,想把配置文件放到包外面,主要就要靠这几个操作。
另外,如果你要读properties文件的话,需要用到加载文件这个操作。
String in = pathString+propertiesfile; props.load(new FileInputStream(new File(in))); String value = props.getProperty(key);
这个inputstream和fileinputstream是有区别的,到时候要注意。
我的程序放上面 体会体会吧
public static void main(String args[]){String pathString="file:"+System.getProperty("user.dir")+"\\applicationContext.xml";ApplicationContext ctx = new ClassPathXmlApplicationContext(pathString);App e = (App) ctx.getBean("entry");e.excute();}
spring的配置文件,不一定放到src里面,放到外面也是能读到的,刚好就是你现在程序的平行位置
假设你这是一个jar包,你想把spring配置文件,或者properties文件放到外面就可以直接这样调用,把配置文件放到jar包的平行位置,可以动态加载,以方便替换
另外,如果你对maven很熟的话,可以自定义一个目录专门用来放这些东西。每次都直接mvn install顺便把配置文件放到这里,不用手动添加。
对maven不是很熟也没关系,直接手动复制就行。
- 关于ClassLoader.getResouce打包配置文件放外面的方法
- java中getResouce()方法的简介
- ClassLoader.getResourceAsStream(name);获取配置文件的方法
- ClassLoader.getResourceAsStream(name);获取配置文件的方法
- ClassLoader.getResourceAsStream(name);获取配置文件的方法
- ClassLoader.getResourceAsStream(name);获取配置文件的方法
- ClassLoader.getResourceAsStream(name);获取配置文件的方法
- ClassLoader.getResourceAsStream(name);获取配置文件的方法
- ClassLoader.getResourceAsStream(name);获取配置文件的方法
- 循环时,对象放里面,放外面的问题
- 获取jar包外面的配置文件
- java工程生成jar,配置文件放在jar外面,读写配置文件
- java工程生成jar,配置文件放在jar外面,读写配置文件
- properties文件、getResouce()方法、getResourceAsStream()方法
- 关于ClassLoader的使用
- 关于ClassLoader的原理
- 关于“宇宙外面是什么”问题的随想
- 关于ClassLoader的知识点记录
- Implement Workflow in SharePoint Designer 2010
- OCP 1Z0 053 122
- 蓝牙协议-----之pan profile on bluedroid
- 冒泡法排序--降序
- 使用startForeground让android服务前台运行
- 关于ClassLoader.getResouce打包配置文件放外面的方法
- Android 原生应用开发得到Go语言支持
- 详解坐标系及坐标变换--大地坐标系(一)
- [LeetCode]Palindrome Partitioning II
- 织梦DedeCMS首页调用随机文章定时自动更新
- 删除两条相同数据中的其中一条记录
- Linux系统下配置服务器运行环境
- 深入理解JavaScript系列 ----(12):变量对象(Variable Object)
- 详解坐标系及坐标变换--大地坐标系(二)