Java文件路径(getResource)
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)相关推荐
- 关于Java文件路径问题
转发:http://lib.csdn.net/article/javase/2046 关于Java文件路径问题 作者:soleghost 1.如何获得当前文件路径 常用: 字符串类型:System.g ...
- 关于Java文件路径问题 1
1.如何获得当前文件路径 常用: 字符串类型:System.getProperty("user.dir"); 综合: package com.zcjl.test.base; imp ...
- java 获取包路径_java获取java文件路径的四种方法
java获取java文件路径的四种方法 发布时间:2020-04-17 11:03:45 来源:亿速云 阅读:750 作者:小新 今天小编给大家分享的是java获取java文件路径的四种方法,很多人都 ...
- Java文件路径问题
转自:https://www.linuxidc.com/Linux/2016-09/135544.htm 前言 项目部署到生产环境(CentOS 7)后在运行过程中多了一些不明文件目录,如下图: 项目 ...
- java 文件路径怎么写_java本地文件路径怎么写
1. java里文件路径怎么写 File file = new File("D:\\123.txt"); 你这种不用绝对路径是不行的, 只有一个方法,在web工程启动servlet ...
- java文件路径转义_java文件路径中“\”和“/”的区别
java文件路径中"\"和"/"的区别 发布时间:2020-06-25 17:51:22 来源:亿速云 阅读:189 作者:Leah 本篇文章为大家展示了jav ...
- java 文件路径读取,java中依据路径读取文件
java中根据路径读取文件 根据文件路径读取文件.具体代码如下: /** * 根据文件路径读取文件 * @param path * @return String * @throws IOExcepti ...
- java文件路径中的两个反斜杠“\\“是什么意思
java的文件路径怎么写-Java基础-PHP中文网
- Java文件路径及文件名乱码_javaweb文件下载及文件名中文乱码处理
版权声明:yanghaha的原创博客 https://blog.csdn.net/qq_44758435/article/details/90636619 文件下载 需要先导入两个jar包 commo ...
最新文章
- [UWP]了解模板化控件(7):支持Command
- C++程序内存分配方式(堆与栈)
- 冲刺阶段——Day5
- 为什么小程序最适合知识付费?
- blade php代码,Laravel 5框架学习之Blade 简介
- mysql 字符串截取_mysql数据库13种常用函数方法总结
- Linux学习总结(64)——DBA常用的Linux命令汇总
- ODOO v10.0 自动生成财务凭证的科目设置
- 微服务模式下API测试
- 《Android和PHP开发最佳实践》一第3章 PHP开发准备
- 微信小程序源码打包合集 游戏商城抽奖转盘预约点餐等-1
- 最详细的3DMax 2019安装教程(从解压开始)
- ATV320、ATV32变频器报tnF如何处理?
- 判断文章内容重复率的算法实现
- H5页面的功能和表现形式有哪些
- 小程序如何获取后端的数据
- SVM(支持向量机)原理及数学推导全过程详解
- html+css实例
- 【MULE平台dw语法】
- BN层 LN层 WN层作用介绍
热门文章
- 使用脚本安装elasticsearch7.3的记录
- BZOJ2299 HAOI2011向量(数论)
- HashMap 和 HashTable 区别
- IOS小技巧–用runtime 解决UIButton 重复点击问题
- 【LeetCode 169】Majority Element
- 给定一个数值,输出符合中国人习惯的读法--记一道笔试题
- C#对事务的代码封装
- 转:WF中的跟踪服务(1):Sql跟踪数据库表,视图,存储过程等相关说明
- Atlas study:使用Accordion实现页面多个块状区域的显隐
- 数据产品必备技术知识:机器学习及常见算法,看这一篇就够了