JAVA 资源定位

1.URI URL URN 3个关系
URI unform resource Identifier 统一资源标识符
URL unform resource Locator 统一资源定位符 可以定位 就可以找到这个物件
你可以试下在本地打开网页 看下地址栏 就明白了
URN unform resource Name 统一资源命
URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源
2.JAVA拿路径

File API 说明
无论是抽象路径名还是路径名字符串,都可以是绝对 路径名或相对 路径名。绝对路径名是完整的路径名,不需要任何其他信息就可以定位它所表示的文件。相反,相对路径名必须使用取自其他路径名的信息进行解释。默认情况下,java.io 包中的类总是根据当前用户目录来解析相对路径名。此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录
TOMCAT下 user.dir 就是Tomcat\bin 目录
而且在不同环境下user.dir 值就不一样 所以用这个来定位资源 是很危险的

最佳方式就是用拿类的绝对路径,然后在相对路径拿你需要文件路径

Java代码 复制代码 收藏代码
  1. package myd.utils;
  2. import java.io.BufferedInputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.util.Properties;
  9. import org.junit.*;
  10. public class DataSoruce {
  11. @Test
  12. public void myTest()
  13. {
  14. Properties properties = new Properties();
  15. InputStream in;
  16. try {
  17. // System.out.println(this.getClass().getResource(""));//相对路径
  18. System.out.println(this.getClass().getResource("/"));//绝对路径
  19. //in = new BufferedInputStream (new FileInputStream("WebRoot/WEB-INF/classes/test2.properties"));
  20. /*
  21. * n = getClass().getResourceAsStream("/test2.properties")
  22. * 和下面效果一样 一个是绝对路径 一个是相对路径应用 /开头表明是绝对路径
  23. * 这个地方的相对路径所依据参考路径 就是classpath所在目录 也就是CLASS这目录 加了
  24. * /就表明拿到这个绝对路径 所以就是CLASSPATH
  25. * 不加/就表明是相对 自然需要../../向上升级目录了
  26. * 这种../../ 方式就可以定位到各个位子的资源了
  27. */
  28. //in = getClass().getResourceAsStream("../../test2.properties");
  29. System.out.println(getClass().getClassLoader().getResource(""));
  30. //这样访问不了 不明白原因 硬盘直接使用是可以执行的
  31. //找到原因了 目前的JDK提供的ClassLoader类的getResource(String 相对路径)方法,只能接受一般的相对路径。这样,使用ClassLoader类的getResource(String 相对路径)方法就只能定位到classpath下的资源
  32. //in = getClass().getClassLoader().getResourceAsStream("../../../../test2.properties");
  33. //拿CLASSpath目录外的文件方式
  34. System.out.println(new File(this.getClass().getResource("").getFile(),"../../../../test2.properties").getCanonicalFile());
  35. in = new FileInputStream(new File(this.getClass().getResource("").getFile(),"../../../../test2.properties"));
  36. properties.load(in);
  37. //File f = new File("test");
  38. //System.out.println("fs"+f.getAbsolutePath());
  39. System.out.println(System.getProperty("user.dir"));
  40. System.out.println(properties.getProperty("jdbc.driverClassName"));
  41. } catch (FileNotFoundException e) {
  42. // TODO Auto-generated catch block
  43. e.printStackTrace();
  44. }catch(IOException e)
  45. {
  46. e.printStackTrace();
  47. }
  48. }   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值