`
zjm16
  • 浏览: 69948 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
文章分类
社区版块
存档分类
最新评论

java中Class.getResource用法

阅读更多
用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要取得c:/test.txt文件,就会这样用File file = new File("c:/test.txt");这样用有什么问题,相信大家都知道,就是路径硬编码,对于JAVA精神来说,应用应该一次成型,到处可用,并且从现实应用来讲,最终生成的应用也会部署到Windows外的操作系统中,对于linux来说,在应用中用了c:/这样的字样,就是失败,所以,我们应该尽量避免使用硬编码,即直接使用绝对路径。



  在Servlet应用中,有一个getRealPath(String str)的方法,这个方法尽管也可以动态地获得文件的路径,不秘直接手写绝对路径,但这也是一个不被建议使用的方法,那么,我们有什么方法可以更好地获得文件呢?



      那就是Class.getResource()与Class.getResourceAsStream()方法,但很多人还是不太懂它的用法,因为很多人(比如不久前的我)都不知道应该传怎么样的参数给它,当然,有些人己经用得如火纯青,这些人是不需要照顾的,在此仅给不会或者还不是很熟的人解释一点点。





比如我们有以下目录

|--project

    |--src

        |--javaapplication

            |--Test.java

            |--file1.txt

        |--file2.txt

    |--build

        |--javaapplication

            |--Test.class

            |--file3.txt

        |--file4.txt



在上面的目录中,有一个src目录,这是JAVA源文件的目录,有一个build目录,这是JAVA编译后文件(.class文件等)的存放目录

那么,我们在Test类中应该如何分别获得

file1.txt  file2.txt  file3.txt  file4.txt这四个文件呢?



首先讲file3.txt与file4.txt

file3.txt:

方法一:File file3 = new File(Test.class.getResource("file3.txt").getFile());

方法二:File file3 = new File(Test.class.getResource("/javaapplication/file3.txt").getFile());

方法三:File file3 = new File(Test.class.getClassLoader().getResource("javaapplication/file3.txt").getFile());



file4.txt:

方法一:File file4 = new File(Test.class.getResource("/file4.txt").getFile());

方法二:File file4 = new File(Test.class.getClassLoader().getResource("file4.txt").getFile());



很好,我们可以有多种方法选择,但是file1与file2文件呢?如何获得?

答案是,你只能写上它们的绝对路径,不能像file3与file4一样用class.getResource()这种方法获得,它们的获取方法如下

假如整个project目录放在c:/下,那么file1与file2的获取方法分别为

file1.txt

方法一:File file1 = new File("c:/project/src/javaapplication/file1.txt");

方法二:。。。没有



file2.txt

方法一:File file2 = new File("c:/project/src/file2.txt");

方法二:。。。也没有



总结一下,就是你想获得文件,你得从最终生成的.class文件为着手点,不要以.java文件的路径为出发点,因为真正使用的就是.class,不会拿个.java文件就使用,因为java是编译型语言嘛



至于getResouce()方法的参数,你以class为出发点,再结合相对路径的概念,就可以准确地定位资源文件了,至于它的根目录嘛,你用不同的IDE build出来是不同的位置下的,不过都是以顶层package作为根目录,比如在Web应用中,有一个WEB-INF的目录,WEB-INF目录里面除了web.xml文件外,还有一个classes目录,没错了,它就是你这个WEB应用的package的顶层目录,也是所有.class的根目录“/”,假如clasaes目录下面有一个file.txt文件,它的相对路径就是"/file.txt",如果相对路径不是以"/"开头,那么它就是相对于.class的路径。。



还有一个getResourceAsStream()方法,参数是与getResouce()方法是一样的,它相当于你用getResource()取得File文件后,再new InputStream(file)一样的结果

分享到:
评论

相关推荐

    解决java打包之后无法加载静态资源的问题SWTResourceManager.java源码

    这是因为通过class.getResource()方法在IDEA中运行的路径和生成jar包获取的的路径是不同的。打成jar包后,获取图片的路径中有"xxx.jar!"这里面的内容是不能够被操作系统识别出来的,因此直接通过路径来获取文件是不...

    java课程设计论文个人通讯录管理系统.doc

    目 录 一、开发背景………………………………………………………………... URL url = LoginFrame.class.getResource("/image/main.jpg"); // 获得图片的URL Image image=new ImageIcon(url).getImage(); // 创建图像对

    数据库工具类DatabaseUtil.java

    * 返回记录总数, 使用方法: getAllCount("SELECT count(ID) from tableName") 2004-06-09 * 可滚动的 Statement 不能执行 SELECT MAX(ID) 之类的查询语句(SQLServer 2000) * * @param sql * 需要执行的 SQL *...

    java在cpu的占有率

    /** java使用内存 */ private double javaUseMemory; public String getOsName() { return osName; } public void setOsName(String osName) { this.osName = osName; } public int getTotalThread() ...

    JFontAwesome:所有 FontAwesome 图标的 Unicode 映射作为静态 Java 类

    在您的 Java FX 项目中使用此类。 有关 FontAwesome 的更多信息,请访问用法1.下载当前版本的 FontAwesome 并将 fontawesome-webfont.ttf 解压到您的资源文件夹。 2.在你的主类中加载字体,如下所示: static {
...

    跟我学Java面向对象程序设计技术及应用——Java-Swing-GUI组件技术教学参考示例(第2部分).pdf

    杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究, 1/16 页 1.1 ... backButton.setIcon(new ImageIcon(getClass().getResource( "/images/mainframe/toolbar/navigator/b

    spring2.5.6源码

    return doLoadBeanDefinitions(inputSource, encodedResource.getResource()); 这里的目的是将资源包装成一个InputSource,连同Resource作为参数传递到doLoadBeanDefinitions方法 Java代码 ...

    ZendFramework中文文档

    14.1.3. 使用静态 get() 方法 14.2. 标准过滤器类 14.2.1. Alnum 14.2.2. Alpha 14.2.3. BaseName 14.2.4. Digits 14.2.5. Dir 14.2.6. HtmlEntities 14.2.7. Int 14.2.8. RealPath 14.2.9. StringToLower...

    springmybatis

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...

    Bootstrap分页

    * 方法二请求使用ModelAndView * * @param request * @param response * @return * @throws Exception */ @RequestMapping(value = "/userList2.do") public ModelAndView userList2...

    jedis使用指南

    this.jedis = pool.getResource(); } public boolean lock(long timeout) { long nano = System.nanoTime(); timeout *= ONE_MILLI_NANOS; try { while ((System.nanoTime() - nano) ) { if (jedis.setnx...

    spark-resource-loading:用于同步资源文件夹中所做更改的 Spark Java 插件

    用法将以下依赖项添加到您的pom.xml : <dependency> <groupId>com.sparkjava</groupId> <artifactId>spark-resource-reloading</artifactId> <version>1.0.0</version></dependency>将以下内容添加到您的主要方法中...

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    cms后台管理

    一 Jeecms安装过程 ...<id name="id" type="java.lang.Integer" column="id"><generator class="identity"/></id> <property name="title" column="title" type="java.lang.String" not-null="true" /> ...

    spring基础

    所以对成员变量使用 @Autowired 后,您大可将它们的 setter 方法(setCar() 和 setOffice())从 Boss 中删除。 当然,您也可以通过 @Autowired 对方法或构造函数进行标注,来看下面的代码 将注解@Autowired放在...

    Spring.net框架

    在上面这段代码中,重点注意三条命令的使用方法: assembly = Assembly.LoadFile(rootPath + prop.assemblyName); p = assembly.CreateInstance(prop.typeName); t.InvokeMember(prop.propertyName, BindingFlags....

    jsp内置对象的用法

    11 URL getResource(String path) 返回指定资源(文件及目录)的URL路径 12 InputStream getResourceAsStream(String path) 返回指定资源的输入流 13 RequestDispatcher getRequestDispatcher(String uripath) ...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    它使用服务层框架可以将JavaBeans从Jsp/Servlet中分离出来,而使用表现层框架则可以将Jsp中剩余的JavaBeans完全分离,这部分JavaBeans主要负责显示相关信息,一般是通过标签库(Taglib)实现,不同框架有不同自己的...

    Visual C++ 编程资源大全(英文源码 其它)

    45.zip Get VersionInfo from resource file 从资源文件中得到程序的版本信息(1)(6KB)<END><br>46,dynip.zip A IP Poster for people with dynamic IP addresses(18KB)<END><br>47,cliptalk.zip An ...

    struts_2.3.12GA_API文档(chm版本)

    Get the resource bundle associated with the implementing class (usually an action). ResourceBundle getTexts(String aBundleName) Get the named bundle, such as "com/acme/Foo". boolean ...

Global site tag (gtag.js) - Google Analytics