在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中路径的问题的更多相关文章

  1. 11. java中路径/和\的区别

    一般可以认为是"/"的作用等同于"\\"在java中路径一般用"/"windows中的路径一般用"\"linux.uni ...

  2. java中路径的获取

    网上摘录 (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getReque ...

  3. Java中路径相关的获取方式

    [参考文章]:Java文件路径(getResource) [参考文章]:关于java:如何获取正在运行的JAR文件的路径? [参考文章]:关于Class.getResource和ClassLoader ...

  4. 对java中路径的一些理解

    开始前先贴一下项目结构 public class TestLocation { @Test public void test1(){ String s1 = Objects.requireNonNul ...

  5. java中路径中参数值是中文,打印到页面是乱码的解决方案

    jsp代码: <% String name=request.getParameter("name"); String age=request.getParameter(&qu ...

  6. java绝对路径和相对路径的理解

    日常开发中引用东西经常会遇到路径问题,各种尝试,各种出错,其实只要理解了这两种路径,问题便迎刃而解. 在java中路径有两种表示方法:绝对路径和相对路径. (1) 相对路径:它以不带“\”的目录名表示 ...

  7. JAVA中 "\" 和 "/" 的区别

    1.在java中路径一般用”/” 2.linux.unix中的路径一般用”/” 3.windows中的路径一般用”\” 所以在java中写windows路径一般用”/”,或用“\”将”\”转义一下(& ...

  8. 【04-10】java中的路径

    java中的路径 System.getProperty("user.dir")  获取工程的绝对路径 Class.class.getClass().getResource(&quo ...

  9. Java EE 编程中路径

    版权声明:未经博主允许,不得转载 首先我们要限定一个范围,是一个项目,或是以个访问地址..就先以一个项目为限定的范围 前述: 学过物理学的都知道相对运动和绝对运动, 虽然是相似的概念,但这里的要简单得 ...

随机推荐

  1. INEQUALITY BOOKS

    来源:这里 Bất Đẳng Thức Luôn Có Một Sức Cuốn Hút Kinh Khủng, Một Số tài Liệu và Sách Bổ ích Cho Việc Học ...

  2. 生成器和迭代器_python

    一.生成器简介(generator) 在进行较大数据的存储,如果直接存储在列表之中,则会可能造成内存的不够与速度的减慢,因为列表创建完是立即创建并存在的,而在python中生成器(generator) ...

  3. (转)KMP算法

    转自:http://blog.csdn.net/yutianzuijin/article/details/11954939 我们首先用一个图来描述kmp算法的思想.在字符串O中寻找f,当匹配到位置i时 ...

  4. anniversary party_hdu1520

    本来以为是一道很简单的提,可以分分钟解决(实际上就是很简单) 然而一直报错,找半天,竟然要多组输入(还是太菜了) 所以每组需要先初始化, 这是一道树形DP的简单题,具体思路就是我选这个上司就不能选他的 ...

  5. Java-POJ1012-Joseph

    打表啦 约瑟夫环,处理时下表统一为从0开始更方便! import java.util.Scanner; public class poj1012 { public static boolean cal ...

  6. java特性之二----继承

    1.继承的概述 ============================================================================================ ...

  7. CF div2

    这是一道二进制思维题: 将所有数字列成二进制形式,然后找出最大的一位“1”出现一次的位数: 然后把这个数提到前面,其他照常输出即可 #include<bits/stdc++.h> usin ...

  8. 找到所有的txt文件并删除

    1.find /oldboy/ -type f -name "*.txt" -delete 2.find /oldboy/ -type f -name "*.txt&qu ...

  9. bzoj 2049: [Sdoi]Cave 洞穴探测 (LCT)

    第一次写lct (这是一道lct裸题 这次没有可爱(划掉)的同学教我,虽然有模板,但是配合网上的讲解还是看不懂QAQ 然后做了几道题之后总算有些感觉辣 于是决定给自己挖个坑,近期写一个lct详解(不过 ...

  10. python修改文件后缀名

    修改文件后缀名 # -*- coding: utf-8 -*- import os # # 列出当前目录下所有的文件 # filedir = 'C:\\Users\\WT\\Desktop\\test ...