getResourceAsStream的解析

package cn.com.TestXml;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class TestStructs {
 InputStream in = getClass().getResourceAsStream("prop.properties");
 public static void main(String[] args){
  TestStructs ts = new TestStructs();
  Properties pro = new Properties();
  try {
   pro.load(ts.in);
  } catch (IOException e) {

   e.printStackTrace();
  }
  String str = pro.getProperty("username");
  System.out.println(str);
  if(ts.in != null)
   System.out.println("wo zhao dao le ");
  else
   System.out.println("我找不到文件啊");
  
  
 }
}我用的是eclipse

首先说明:prop.properties放在工程目录下!!然后用("prop.properties")测试 异常。然后用("/prop.properties");通过!可以说明

/ 代表的是工程目录。也就是说有了/ 就会先在工程目录找。如果把 prop.properties放在工程下令一个包例如 cn.com.node 那么路径就相应为/cn/com/node/prop.properties.也就是说可以跨目录读取文件。但前提是有/

如果路径为“prop.properties” 那么就必须将prop.properties放在类的同一包里 。在使用Class.getResourceAsStream 时, 资源路径有两种方式, 一种以 / 开头,则这样的路径是指定绝对
路径, 如果不以 / 开头, 则路径是相对与这个class所在的包的。

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

还有一些我摘自其他人的:

老兄和我犯的错误是一样的:  
  要区分Class的getResourceAsStream和ClassLoader的getResourceAsStream方法。  
  ClassLoader的该方法如果name以/开头那么就什么也找不到了。  
   
  而Class的getResourceAsStream方法如果name以/开头那么就把/以后的name传递给ClassLoader的  
  getResourceAsStream方法。如果不已/开头那么将该class的包名加上name作为参数(用/代替.)之后  
  传给ClassLoader的对应方法。  
   
  看一下程序:  
  package   com.test;  
  import   java.io.*;  
   
  public   class   UseResourceTest   {  
  public   static   void   main(String[]   args)   throws   Exception   {  
  UseResourceTest   test   =   new   UseResourceTest();  
  InputStream   in   =   test.getClass().getResourceAsStream("a.txt");  
  System.out.println(in);  
  }  
  }  
  效果相当于:  
  package   com.test;  
  import   java.io.*;  
   
  public   class   UseResourceTest   {  
  public   static   void   main(String[]   args)   throws   Exception   {  
  InputStream   in   =   ClassLoader.getSystemClassLoader().getResourceAsStream("com/test/a.txt");  
  System.out.println(in);  
  }  
  }   
 

这是我个人的复习笔记。没什么技术含量。看过不要见笑!!!

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值