getResourceAsStream ()返回的是inputstream

getResource()返回:URL

Class.getResource("")    返回的是当前Class这个类所在包开始的为置

Class.getResource("/") 返回的是classpath的位置

getClassLoader().getResource("")  返回的是classpath的位置

getClassLoader().getResource("/")  错误的!!

======================================================================== 
Class.getResourceAsStream 和 ClassLoader.getResourceAsStream

这两个方法还是略有区别的, 以前一直不加以区分,直到今天发现要写这样的代码的时候运行错误, 才把这个问题澄清了一下。

基本上,两个都可以用于从 classpath 里面进行资源读取,  classpath包含classpath中的路径和classpath中的jar。

两个方法的区别是资源的定义不同, 一个主要用于相对与一个object取资源,而另一个用于取相对于classpath的资源,用的是绝对路径。

在使用Class.getResourceAsStream 时, 资源路径有两种方式, 一种以 / 开头,则这样的路径是指定绝对路径, 如果不以 / 开头, 则路径是相对与这个class所在的包的。

在使用ClassLoader.getResourceAsStream时, 路径直接使用相对于classpath的绝对路径。

举例,下面的三个语句,实际结果是一样的

com.explorers.Test.class.getResourceAsStream("abc.jpg") 
com.explorers.Test.class.getResourceAsStream("/com/explorers/abc.jpg") 
ClassLoader.getResourceAsStream("com/explorers/abc.jpg") 
================================================================================

平时写程序的时候,很多时候提示文件找不到,而抛出了异常,现在整理如下

一 相对路径的获得 
    说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的Java项目还是web项目) 
         String relativelyPath=System.getProperty("user.dir"); 
        上述相对路径中,java项目中的文件是相对于项目的根目录 
        web项目中的文件路径视不同的web服务器不同而不同(tomcat是相对于 tomcat安装目录\bin)

二 类加载目录的获得(即当运行时某一类时获得其装载目录) 
      1)通用的方法一(不论是一般的java项目还是web项目,先定位到能看到包路径的第一级目录) 
        
        InputStream is=TestAction.class.getClassLoader().getResourceAsStream("test.txt");
        (test.txt文件的路径为 项目名\src\test.txt;类TestAction所在包的第一级目录位于src目录下) 
        
        上式中将TestAction,test.txt替换成对应成相应的类名和文件名字即可

2)通用方法二 (此方法和1中的方法类似,不同的是此方法必须以'/'开头) 
         InputStream is=Test1.class.getResourceAsStream("/test.txt"); 
         (test.txt文件的路径为 项目名\src\test.txt,类Test1所在包的第一级目录位于src目录下)

三 web项目根目录的获得(发布之后) 
    1 从servlet出发

可建立一个servlet在其的init方法中写入如下语句 
   ServletContext s1=this.getServletContext(); 
   String temp=s1.getRealPath("/"); (关键) 
    结果形如:D:\工具\Tomcat-6.0\webapps\002_ext\ (002_ext为项目名字)

如果是调用了s1.getRealPath("")则输出D:\工具\Tomcat-6.0\webapps\002_ext(少了一个"\")

2 从httpServletRequest出发

String cp11111=request.getSession().getServletContext().getRealPath("/");

结果形如:D:\工具\Tomcat-6.0\webapps\002_ext\

四 classpath的获取(在Eclipse中为获得src或者classes目录的路径)

方法一   Thread.currentThread().getContextClassLoader().getResource("").getPath()

eg: String t=Thread.currentThread().getContextClassLoader().getResource("").getPath();
          System.out.println("t---"+t);

输出:t---/E:/order/002_ext/WebRoot/WEB-INF/classes/

方法二     JdomParse.class.getClassLoader().getResource("").getPath() (JdomParse为src某一个包中的类,下同)

eg:String p1=JdomParse.class.getClassLoader().getResource("").getPath();
       System.out.println("JdomParse.class.getClassLoader().getResource--"+p1);

输出: JdomParse.class.getClassLoader().getResource--/E:/order/002_ext/WebRoot/WEB-INF/classes/

另外,如果想把文件放在某一包中,则可以 通过以下方式获得到文件(先定位到该包的最后一级目录)

eg String p2=JdomParse.class.getResource("").getPath(); 
         System.out.println("JdomParse.class.getResource---"+p2);

输出: JdomParse.class.getResource---/E:/order/002_ext/WebRoot/WEB-INF/classes/jdom/ (JdomParse为src目录下jdom包中的类)

五   属性文件的读取:

方法 一

InputStream in = lnew BufferedInputStream( new FileInputStream(name));

Properties p = new Properties();

p.load(in);

注意路径的问题,做执行之后就可以调用p.getProperty("name")得到对应属性的值

方法二

Locale locale = Locale.getDefault();  
            ResourceBundle localResource = ResourceBundle.getBundle("test/propertiesTest", locale);
            String value = localResource.getString("test"); 
            System.out.println("ResourceBundle: " + value);

工程src目录下propertiesTest.properties(名字后缀必须为properties)文件内容如下:

test=hello word

public class FileTest {    public static void main(String[] args) {System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));System.out.println(FileTest.class.getClassLoader().getResource(""));System.out.println(ClassLoader.getSystemResource(""));System.out.println(FileTest.class.getResource(""));System.out.println(FileTest.class.getResource("/")); // Class文件所在路径System.out.println(new File("/").getAbsolutePath());System.out.println(System.getProperty("user.dir"));}
}

输出结果:

file:/E:/workspace/JavaStudy/bin/ 
file:/E:/workspace/JavaStudy/bin/ 
file:/E:/workspace/JavaStudy/bin/ 
file:/E:/workspace/JavaStudy/bin/test/ 
file:/E:/workspace/JavaStudy/bin/ 
E:\ 
E:\workspace\JavaStudy

转载于:https://my.oschina.net/vshcxl/blog/664478

Java文件路径(getResource)相关推荐

  1. 关于Java文件路径问题

    转发:http://lib.csdn.net/article/javase/2046 关于Java文件路径问题 作者:soleghost 1.如何获得当前文件路径 常用: 字符串类型:System.g ...

  2. 关于Java文件路径问题 1

    1.如何获得当前文件路径 常用: 字符串类型:System.getProperty("user.dir"); 综合: package com.zcjl.test.base; imp ...

  3. java 获取包路径_java获取java文件路径的四种方法

    java获取java文件路径的四种方法 发布时间:2020-04-17 11:03:45 来源:亿速云 阅读:750 作者:小新 今天小编给大家分享的是java获取java文件路径的四种方法,很多人都 ...

  4. Java文件路径问题

    转自:https://www.linuxidc.com/Linux/2016-09/135544.htm 前言 项目部署到生产环境(CentOS 7)后在运行过程中多了一些不明文件目录,如下图: 项目 ...

  5. java 文件路径怎么写_java本地文件路径怎么写

    1. java里文件路径怎么写 File file = new File("D:\\123.txt"); 你这种不用绝对路径是不行的, 只有一个方法,在web工程启动servlet ...

  6. java文件路径转义_java文件路径中“\”和“/”的区别

    java文件路径中"\"和"/"的区别 发布时间:2020-06-25 17:51:22 来源:亿速云 阅读:189 作者:Leah 本篇文章为大家展示了jav ...

  7. java 文件路径读取,java中依据路径读取文件

    java中根据路径读取文件 根据文件路径读取文件.具体代码如下: /** * 根据文件路径读取文件 * @param path * @return String * @throws IOExcepti ...

  8. java文件路径中的两个反斜杠“\\“是什么意思

    java的文件路径怎么写-Java基础-PHP中文网

  9. Java文件路径及文件名乱码_javaweb文件下载及文件名中文乱码处理

    版权声明:yanghaha的原创博客 https://blog.csdn.net/qq_44758435/article/details/90636619 文件下载 需要先导入两个jar包 commo ...

最新文章

  1. [UWP]了解模板化控件(7):支持Command
  2. C++程序内存分配方式(堆与栈)
  3. 冲刺阶段——Day5
  4. 为什么小程序最适合知识付费?
  5. blade php代码,Laravel 5框架学习之Blade 简介
  6. mysql 字符串截取_mysql数据库13种常用函数方法总结
  7. Linux学习总结(64)——DBA常用的Linux命令汇总
  8. ODOO v10.0 自动生成财务凭证的科目设置
  9. 微服务模式下API测试
  10. 《Android和PHP开发最佳实践》一第3章 PHP开发准备
  11. 微信小程序源码打包合集 游戏商城抽奖转盘预约点餐等-1
  12. 最详细的3DMax 2019安装教程(从解压开始)
  13. ATV320、ATV32变频器报tnF如何处理?
  14. 判断文章内容重复率的算法实现
  15. H5页面的功能和表现形式有哪些
  16. 小程序如何获取后端的数据
  17. SVM(支持向量机)原理及数学推导全过程详解
  18. html+css实例
  19. 【MULE平台dw语法】
  20. BN层 LN层 WN层作用介绍

热门文章

  1. 使用脚本安装elasticsearch7.3的记录
  2. BZOJ2299 HAOI2011向量(数论)
  3. HashMap 和 HashTable 区别
  4. IOS小技巧–用runtime 解决UIButton 重复点击问题
  5. 【LeetCode 169】Majority Element
  6. 给定一个数值,输出符合中国人习惯的读法--记一道笔试题
  7. C#对事务的代码封装
  8. 转:WF中的跟踪服务(1):Sql跟踪数据库表,视图,存储过程等相关说明
  9. Atlas study:使用Accordion实现页面多个块状区域的显隐
  10. 数据产品必备技术知识:机器学习及常见算法,看这一篇就够了