java获取文件夹 路径,Java获取文件的路径

本文记录的是如何获取资源文件的路径.

先看看我设置的文件目录结构,如下图所示:

structure-of-file.png ___

Java Build Path的设置如下图所示, 主要看build project之后的文件输出目录:

java-build-path.png ___

在Java中有两种方式可以获取到文件的路径,通过下面的测试代码看看它们的不同:

1

2

3

4

5String resPath = this.getClass().getResource("").getPath();

System.out.println("resPath: " + resPath);

String resPath1 = this.getClass().getClassLoader().getResource("").getPath();

System.out.println("resPath1: " + resPath1);

控制台中输出结果如下:

1

2resPath: /Users/carya/dev/RwProperties/target/classes/edu/cugb/tester/

resPath1: /Users/carya/dev/RwProperties/target/classes/

从结果中可以看到,使用this.getClass().getResource()获得的是代码所在类编译成class文件之后输出文件所在目录位置,而this.getClass().getClassLoader().getResource()获得的是class loader所在路径,该函数查看Java doc解释如下:

Finds the resource with the given name. A resource is some data (images, audio, text, etc) that can be accessed by class code in a way that is independent of the location of the code. The name of a resource is a ‘/’-separated path name that identifies the resource.

This method will first search the parent class loader for the resource; if the parent is null the path of the class loader built-in to the virtual machine is searched. That failing, this method will invoke findResource(String) to find the resource.

使用this.getClass().getResource(String name)函数时,name参数可以使用文件的绝对路径,也可以使用相对路径,如下所示:

1

2

3

4

5String resPath2 = this.getClass().getResource("../../../jdbc.properties").getPath();

System.out.println("resPath2: " + resPath2);

String resPath3 = this.getClass().getResource("/hbm/setting.txt").getPath();

System.out.println("resPath3: " + resPath3);

上述事例控制台的输出是:

1

2resPath2: /Users/carya/dev/RwProperties/target/classes/jdbc.properties

resPath3: /Users/carya/dev/RwProperties/target/classes/hbm/setting.txt

而使用this.getClass().getClassLoader().getResource(String name)函数时,name参数则只能使用相对于class loader目录的路径,即相对路径,看下面的事例:

1

2

3

4

5String resPath4 = this.getClass().getClassLoader().getResource("./hbm/setting.txt").getPath();

System.out.println("resPath4: " + resPath4);

String resPath5 = this.getClass().getClassLoader().getResource("/hbm/setting.txt").getPath();

System.out.println("resPath5: " + resPath5);

控制台输出如下, resPath4使用的是相对路径,能够得到正确结果,而resPath5使用的是绝对路径,抛出Exception:

1

2

3

4resPath4: /Users/carya/dev/RwProperties/target/classes/hbm/setting.txt

Exception in thread "main" java.lang.NullPointerException

at edu.cugb.tester.PropertiesPath.getFilePath(PropertiesPath.java:39)

at edu.cugb.tester.PropertiesPath.main(PropertiesPath.java:54)

另外,Thread.currentThread().getContextClassLoader().getResource()也可以获取资源文件路径,在获取资源路径方面其使用与this.getClass().getClassLoader().getResource()相似:

1

2

3

4

5String resPath6 = Thread.currentThread().getContextClassLoader().getResource("").getPath();

System.out.println("resPath6: " + resPath6);

String resPath7 = Thread.currentThread().getContextClassLoader().getResource("./jdbc.properties").getPath();

System.out.println("resPath7: " + resPath7);

控制台的输出如下:

1

2resPath6: /Users/carya/dev/RwProperties/target/classes/

resPath7: /Users/carya/dev/RwProperties/target/classes/jdbc.properties

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 示例_功能Java示例 第4部分–首选不变性

java 示例这是称为“ Functional Java by Example”的系列文章的第4部分。 在上一部分中,我们讨论了一些副作用,并且我想进一步详细说明如何通过将不可变性引入代码中来防止意外地对数据进行操作。 如果您是第一次来,最好是从头开始阅读。 …

SVN merge(合并) 的三种方式

文章目录一、合并一个范围的版本(Merge a range of revisions)二、复兴合并(Reintegrate a branch)三、合并两个不同的树(Merge two different trees)四、实例五、总结合并的工作是 把主干或者分支上合并范…

php主机安装v2,RackTables 安装教程Installation GuideV2

RackTables安装教程 V1.01.准备一份Ubuntu 12.04.01 LTS的 ISO (系统最好用Ubuntu的版本,简单实用)。2.安装操作系统, 功能选中OPENSSH SERVER (开启SSH)和 LAMP SERVER ,注意在LAMP安装过程中会提示MySQL的ROOT密码,这个密码很重要&#xff…

java延时执行_Java谓词的延迟执行

java延时执行在先前的文章“ 用Java的供应商延迟执行 ”和“ Java的消费者延迟执行 “,我看着很容易地通过推迟标准Java API接受,分别在Java执行供应商 S和消费者秒。 在本文中,我将对标准JDK提供的API如何通过标准功能接口Predicate允许延迟…

Mac 如何彻底删除/卸载程序

卸载某些应用程序后会留下一些预置文件和缓存等,一般这些文件没有潜在坏处,不过有些文件的存在也会导致无法正常安装新版本,你可以删除它们来彻底跟该应用程序说拜拜。这些文件通常位于以下路径: ~/Library/Application Support/…

air java,Java Bean

1.Java Bean 简介Java Bean (也称为Bean) 是一个遵循特定写法的Java类,只不过这个类需要遵循一些编码的约定,通常具有如下特点:1).它是一个公开的(public)类;2).它有一个默认的构造方法,也就是不带参数的构造方法(在实…

如何理解Java的类变量、成员变量、常量、类属性、实例属性、字段(field)、成员方法、类方法

文章目录变量相关概念变量/常量类变量/静态变量成员变量/实例变量类属性/实例属性/对象属性什么是 field成员变量和类变量的区别两个变量的生命周期不同访问方式不同数据存储位置不同方法相关概念示例代码判断题变量相关概念 变量/常量 所谓变量就是指可以改变的数据量&#…

无处不再的广告_我的机器人现在无处可去。 无家可归。 无服务器。

无处不再的广告我通常会关注各种网站-最新出版物,热门新报价,限时游戏和竞赛等。 其中大多数不提供“干净”的通知系统,例如RSS feed。 因此,我经常不得不刮擦他们HTML才能达到我的需求。 这意味着我经常需要运行一些自定义的字…

java service实例,javaweb后端实例 service

service的作用1.将前端需要的业务代码封装成接口2.将do数据封装为vo3.水平有限只知道这些下面展示的代码为将do封装为vopublic class StationService { private StationDao stationDao new StationDao(); public List listSLByYear(int year) { //创建vo链表 List list new L…

前端 JS 如何在一个页面中局部加载其它页面的数据

一个页面很大&#xff0c;可以分成多个部分&#xff0c;先把小部分的 jsp 写好之后&#xff0c;再在主页面中通过 Struts 2 标签或 ajax 请求来引入其它的 jsp 显示信息。 通过 jQuery 函数来加载其它页面的数据 <script> $(function () {$("#new").load(&qu…

switch字符串jdk_应用新的JDK 11字符串方法

switch字符串jdk在“ 使用JDK 11的Java字符串上的新方法 ”和“ String&#xff03;repeat即将加入Java&#xff1f; ”&#xff0c;我讨论了JDK 11引入Java String的六种新方法。 可用的早期访问JDK 11构建已经包含了这些新方法&#xff0c;在这篇文章中&#xff0c;我将使用…

aws lambda使用_使用AWS Lambda的CloudWatch事件通知

aws lambda使用CloudWatchEvents的主要用例是跟踪整个AWS基础架构中的更改。 当前&#xff0c;它支持跨Auto Scaling组&#xff0c;EC2&#xff0c;EBS和其他各种事件发出的事件。 为了对这些事件进行有意义的处理&#xff0c;我们需要一种消耗它们的方法。 AWS使用术语“ targ…

Struts2中的OGNL表达式和ValueStack

文章目录OGNL 是干什么用的示例代码一示例代码二使用OGNL获取JavaBean对象的属性值获取集合属性中元素的属性的值XWork 中对 OGNL 的扩展示例代码Struts2 对 OGNL 的封装OGNL 可以用在哪些地方OGNL 的结构示意图XWork 对 OGNL 改造后的结构示意图Struts 2 对 OGNL 改造后的结构…

matlab画图五角星标记,Matlab---画图线型、符号及颜色

Matlab 画图线形、颜色、数据点形状的选择1&#xff0c;线形- Solid line (default)-- Dashed line: Dotted line-. Dash-dot line2&#xff0c;颜色r Redg Greenb Bluec Cyanm Magentay Yellowk Blackw White3&#xff0c;数据点的形状 Plus signo Circle* Asterisk. Pointx C…

php 淘宝客接口开发,如何使用PHP的curl函数调用维易淘客接口

《如何使用PHP的curl函数调用维易淘客接口》要点&#xff1a;使用curl调用维易淘客接口高佣转链维易淘客接口是用GET方式调用的&#xff0c;直接用GET调用即可&#xff0c;以下用PHP为例&#xff1a;使用curl调用维易淘客接口高佣转链&#xff1a;$apihttp://api.vephp.com/hca…

querydsl 转字符串_QueryDSL中包含通配符的字符串的精确匹配

querydsl 转字符串在我们最近的一个项目中&#xff0c;我们的客户要求一个搜索字段&#xff0c;该字段可以搜索名字&#xff0c;姓氏和电子邮件地址&#xff0c;唯一的通配符是星号“ *”&#xff0c;表示部分匹配。 听起来很简单&#xff0c;但这使我们陷入了混乱。 在我们的项…

Java中,我自己定义的某个类,去实现某个接口,是否必须实现该接口的全部抽象方法呢?

不一定&#xff0c;关键要看子类是否是抽象类。 如果子类是非抽象类&#xff0c;则必须实现接口中的所有方法&#xff1b;如果子类是抽象类&#xff0c;则可以不实现接口中的所有方法&#xff0c;因为抽象类中允许有抽象方法的存在&#xff01; 一、抽象类定义 抽象类往往用…

堆栈溢出 java_堆栈溢出回答了我们所不知道的Java首要问题

堆栈溢出 java您不应该错过的堆栈溢出问题集合&#xff1a; 这不是秘密&#xff1b; 我们都使用堆栈溢出。 它拥有生命&#xff0c;宇宙和几乎所有与代码相关的答案。 该平台为开发人员&#xff0c;工程师和其他人员提供了一个找到他们所面临问题的答案的地方&#xff0c;或者…

Java 的面向接口编程

假设有这样的代码&#xff1a; F f new G(); f.do(); f.cook(); ...F 是一个接口&#xff0c;G 是 F 的一个实现类&#xff08;也叫具体类/派生类&#xff09;。 如果现在需要另外一个实现类 H 采用其他技术实现接口 F 的所有抽象方法&#xff0c;那么只要修改一条代码&…

mysql 表数据diff,mysqldiff使用笔记

背景手上有个项目&#xff0c;有三个环境:本地开发,测试环境,线上环境&#xff0c;历史原因怀疑数据库表字段可能出现不匹配&#xff0c;所以寻找合适的工具比较数据库表结构。找到了mysqldiff。准备工具正好手上有台windows机器&#xff0c;使用windows版本测试安装mysqldiff是…