className.class.getResourceAsStream 用法:

第一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件config.properties

那么,应该有如下代码:

//前面没有“/”代表当前类的目录

InputStream is1 = Test.class.getResourceAsStream("config.properties");
System.out.println(is1);// 不为null

第二:在Test.class目录的子目录下,例如:com.x.y 下有类Test.class ,同时在 com.x.y.prop目录下有资源文件config.properties

那么,应该有如下代码:

//前面没有“/”代表当前类的目录

InputStream is2 = Test.class.getResourceAsStream("prop/config.properties");
System.out.println(is2);//不为null

第三:不在同目录下,也不在子目录下,例如:com.x.y 下有类Test.class ,同时在 com.m.n 目录下有资源文件config.properties

那么,应该有如下代码:

//前面有“/”,代表了工程的根目录

InputStream is3 = Test.class.getResourceAsStream("/com/m/n/config.properties");

System.out.println(is3);//不为null

ClassLoader.getSystemResourceAsStream 用法:

和className.class.getResourceAsStream 的第三种取得的路径一样,但少了“/”

InputStream is4 = ClassLoader.getSystemResourceAsStream("properties/PayManagment_Config.properties");

System.out.println(is4);//不为null

FileInputStream 用法:

和前面的不一样,

一:例如:com.x.y 下有类Test.class ,用上面的三种不同路径取得的结果都是找不到路径:

代码:

FileInputStream fis;
  try {
   fis = new FileInputStream("config.properties");

//fis = new FileInputStream("prop/config.properties");

//fis = new FileInputStream("/com/m/n/config.properties");

//fis = new FileInputStream("com/m/n/config.properties");

System.out.println(fis);
  } catch (FileNotFoundException e) {
   System.out.println("找不到路径");
  }

结果都是:找不到路径

为什么呢?

再试试:

一 单独的类:

String projectPath = System.getProperty("user.dir");//main方法取得的是当前项目路径

//System.out.println(projectPath);

fis = new FileInputStream(projectPath + "/src/com/m/n/config.properties");
System.out.println(fis);//不为空了

二:

但是我在做rcp项目时,System.getProperty("user.dir");取得的路径就是D:/Program Files/eclipse, 我的eclipse 安装路径,所以我把资源文件直接放eclipse目录底下

fis = new FileInputStream("config.properties");
System.out.println(fis);//不为空了

不知道为什么?现在只是知道了这几种方法肯定有一种适合,但还是有点模糊不清,望懂得的人指点。

//前面没有“/”代表当前类的目录

java 路径、className.class.getResourceAsStream()、ClassLoader.getSystemResourceAsStream() 、FileInputStream的更多相关文章

  1. className.class.getResourceAsStream与ClassLoader.getSystemResourceAsStream区别

    className.class.getResourceAsStream : 一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件conf ...

  2. Java路径问题最终解决方案—可定位所有资源的相对路径寻址

    1.在Java项目中,应该通过绝对路径访问文件,以下为访问的常用方法: 第一种方法:类名.class.getResource("/").getPath()+文件名 第二种方法:Th ...

  3. Java路径问题终于解决方式—可定位全部资源的相对路径寻址

    1.在Java项目中,应该通过绝对路径訪问文件.下面为訪问的经常用法: 第一种方法:类名.class.getResource("/").getPath()+文件名称 另外一种方法: ...

  4. ClassLoader.getSystemResourceAsStream()

    一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件config.properties 那么,应该有如下代码: //前面没有" ...

  5. ClassLoader.getSystemResourceAsStream("a.txt")获取不到资源文件

    一.解决方案 换成XXX.class.getClassLoader().getResourceAsStream("a.txt")即可. 二.场景复现 src/main/resour ...

  6. 【Java基础】通过getResourceAsStream() 加载资源文件

    Class.getResourceAsStream(String path) path不以"/"开头时,默认是从当前类所在的包下面获取资源 path以"/"开头 ...

  7. When a java class is load by classloader, where the constant poll be put?

    Q:When a java class is load by classloader, where the constant poll be put? A:the "Non-Heap Mem ...

  8. java中class.forName和classLoader加载类的区分

     java中class.forName和classLoader都可用来对类进行加载.前者除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块.而classLoade ...

  9. 一篇文章带你吃透,Java界最神秘技术ClassLoader

    ClassLoader 是 Java 届最为神秘的技术之一,无数人被它伤透了脑筋,摸不清门道究竟在哪里.网上的文章也是一篇又一篇,经过本人的亲自鉴定,绝大部分内容都是在误导别人.本文我带读者彻底吃透 ...

随机推荐

  1. python语法学习之函数、类、模块

    Python中通过使用类(class)和对象(object)来实现面向对象(object-oriented programming,简称OOP)的编程. 面向对象编程的最主要目的是提高程序的重复使用性 ...

  2. NTP时间服务器搭建

    系统时区设置::: 查看当前时区# date -R修改系统时区# timeconfig  或# cp  /usr/share/zoneinfo/Asia/Shanghai  /etc/localtim ...

  3. 在Linux Bash通过上下键快速查找历史命令

    在centos 7中 ~/.bashrc 或者Mac中的 ~/.bash_profile 中添加,然后source一下以下内容: if [[ $- == *i* ]] then bind '" ...

  4. Haskell语言学习笔记(58)Bifoldable

    Bifoldable class Bifoldable p where bifold :: Monoid m => p m m -> m bifold = bifoldMap id id ...

  5. CSS3 弹性盒模型 box-flex

    说明:本文档兼容性测试基础环境为:windows系统:IE6-IE10, Firefox6.0, Chrome13.0, Safari5.1, Opera11.51 语法: box-flex:< ...

  6. git 使用 添加分支

    http://jingyan.baidu.com/album/19192ad83ea879e53e5707ce.html?picindex=1 修改配置 git config --global use ...

  7. 取消svn add

    svn commit之前,add的东西都可以取消. 通过先执行svn cleanup,再执行svn revert --recursive example_folder.

  8. In case of failure

    In case of failure http://acm.hdu.edu.cn/showproblem.php?pid=2966 Time Limit: 60000/30000 MS (Java/O ...

  9. iOS下JS与OC互相调用(七)--Cordova 环境搭建

    Cordova大家可能比较陌生,但肯定听过 PhoneGap ,Cordova 就是 PhoneGap 被 Adobe 收购后所改的名字.它是一个可以让 JS 与原生代码互相通信的一个库,并且提供了一 ...

  10. php Pthread 多线程 (六) Pool类 线程池

    Pool对象是多个Worker对象的容器,同时也是它们的控制器,对Worker功能更高抽象. 比如Worker是河,而线程是运行在河里的船.Pool则是管理着多条河. <?php //继承Col ...