java中路径的问题
在java中,涉及路径的问题有很多,不管在windows还是linux系统中,不要纠结”/“分隔符的使用,在windows系统中,资源加载器会自动的将”/“转换成”\“。
在java中获取资源的方式有2种,假设工程的编译输出路径为E:\java\Test_Project\bin
1.getClass().getResource();
1.getClass().getResource("/") ---> E:\java\Test_Project\bin
2.getClass().getResource("") ---> E:\java\Test_Project\bin\com\util (假设当前类的包名为com.util)
2.getClass().getClassLoader().getResource()
1.getClass().getClassLoader().getResource("") ---> E:\java\Test_Project\bin
2.getClass().getClassLoader().getResource("/") ---> 不支持使用"/"
3.servletContext.getResource("") ---> 在web项目中,使用servletContext接口中的getResource()方法进行文件获取,根目录是部署后的文件根目录,一般情况下priperties等的配置文件都在classes文件夹中,
所以准确的获取方式为servletContext.getResource("/WEB-INF/classes/db.properties"),若在web项目中仍旧使用ClassLoader方式加载资源,则保持不变,即getClass().getClassLoader().getResource("db.properties")
得出结论,context默认的根目录为项目部署目录,而classloader方式加载资源文件,默认根目录为资源文件编译目录,也就是classes目录
public static void main(String[] args) throws IOException {
InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("aa.txt");
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
char[] chars = new char[1024];
int len = 0;
while ((len = inputStreamReader.read(chars)) != -1) {
for (char c : chars) {
System.out.print(c);
}
}
inputStreamReader.close();
inputStream.close();
}
打包后的资源文件访问问题总结,假设打包成jar包名称为Main.jar
1.将资源文件打包在jar包内
使用 getClass().getClassLoader().getResource("") 的方式读取资源文件,资源文件的路径如下图,aa.txt在解压Main.jar后的根目录下

2.不将资源文件打包在jar包内
使用 getClass().getClassLoader().getResource("") 的方式读取资源文件,则jar包需要与aa.txt在同一个目录下
3.提出疑问,若打包时把资源文件打包在了jar包内,然后再将该资源文件进行删除,把资源文件放在jar包同目录,看是否能正常运行
测试结果:当把jar包内的资源文件进行删除后,程序报错,无法找到该资源。然后把资源文件放在jar包的同目录内,又可以正常运行
得出结论:jar包内的根目录其实等同于jar包所在的当前目录,当在java代码内进行资源文件引用时,会从jar包内部的当前目录和jar包当前所在目录进行资源文件的查找,
可以把java工程中编译后的bin目录等同于jar包当前所在目录和jar包内部的当前目录。
java中路径的问题的更多相关文章
- 11. java中路径/和\的区别
一般可以认为是"/"的作用等同于"\\"在java中路径一般用"/"windows中的路径一般用"\"linux.uni ...
- java中路径的获取
网上摘录 (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getReque ...
- Java中路径相关的获取方式
[参考文章]:Java文件路径(getResource) [参考文章]:关于java:如何获取正在运行的JAR文件的路径? [参考文章]:关于Class.getResource和ClassLoader ...
- 对java中路径的一些理解
开始前先贴一下项目结构 public class TestLocation { @Test public void test1(){ String s1 = Objects.requireNonNul ...
- java中路径中参数值是中文,打印到页面是乱码的解决方案
jsp代码: <% String name=request.getParameter("name"); String age=request.getParameter(&qu ...
- java绝对路径和相对路径的理解
日常开发中引用东西经常会遇到路径问题,各种尝试,各种出错,其实只要理解了这两种路径,问题便迎刃而解. 在java中路径有两种表示方法:绝对路径和相对路径. (1) 相对路径:它以不带“\”的目录名表示 ...
- JAVA中 "\" 和 "/" 的区别
1.在java中路径一般用”/” 2.linux.unix中的路径一般用”/” 3.windows中的路径一般用”\” 所以在java中写windows路径一般用”/”,或用“\”将”\”转义一下(& ...
- 【04-10】java中的路径
java中的路径 System.getProperty("user.dir") 获取工程的绝对路径 Class.class.getClass().getResource(&quo ...
- Java EE 编程中路径
版权声明:未经博主允许,不得转载 首先我们要限定一个范围,是一个项目,或是以个访问地址..就先以一个项目为限定的范围 前述: 学过物理学的都知道相对运动和绝对运动, 虽然是相似的概念,但这里的要简单得 ...
随机推荐
- 【转】继承了母版页的子页面中触发body的onload事件
碰到有个继承了母版页的页面要加载body的onload事件,我发了一下午来解决这个问题,终于在国外某论坛上找到了解决方案 Method1: In the master page make the bo ...
- java8 四大核心函数式接口Function、Consumer、Supplier、Predicate(转载)
Function<T, R> T:入参类型,R:出参类型 调用方法:R apply(T t); 定义函数示例:Function<Integer, Integer> func = ...
- mysql(3):锁和事务
MySQL锁的介绍 锁是数据库系统区别于文件系统的一个关键特性.锁机制用于管理对共享资源的并发访问. 表级锁 例如MyISAM引擎,其锁是表锁设计.并发情况下的读没有问题,但是并发插入时的性能要差一些 ...
- Jupyter Notebook 更改本地目录
首先如果使用anaconda直接安装jupyter notebook的话,直接在windows的cmd中输入jupyter notebook是没有用的,参见下图: 原因可能是anaconda代理了所有 ...
- 安装java jdk环境jdk1.8
1) yum 安装java jdk 1.8 * -y 验证java [root@localhost local]# java -version openjdk version "1.8.0_ ...
- awk从放弃到入门(2):awk分隔符
一.awk分隔符 awk的默认分割符是空格,但是,这样描述并不精确,因为,awk的分隔符还分为两种,"输入分隔符" 和 "输出分隔符" . (1)输入分隔符:英 ...
- Python记:通用的序列操作之成员资格(听起来倒是有些抽象的!)
______________________________永远守护这一尘不染的真心! 要检查特定的值是否包含在序列中,可使用运算符in.它检查是否满足指定的条件,并返回相应的值:满足时返回True, ...
- 网页格式gbk转utf-8【python requests】
resp = requests.get(url) resp.content 是str类型 resp.text是unicode类型 如果返回的中文使用gbk编码,需要转换成utf-8的时候: resp. ...
- intellij idea设置打开多个文件显示在多行tab上
- Kubernetes 升级记录:从 1.16.3 升级至 1.17.0
参考官方文档 Upgrading kubeadm clusters 在 ubuntu 18.04 上完成了升级,记录一下升级步骤. 一.升级第一个 master 节点 apt-get 安装 kubea ...