在Java中,有两种路径:

  • 类路径
  • 文件夹路径

使用类路径有两种方式:

  • object.getClass().getResource()返回资源的URL
  • MyClass.class.getResource()返回资源的URL
  • obj.getClass().getResourceAsStream()返回资源流
  • MyClass.class.getResourceAsStream()返回资源流

其实就是说,必须通过class获取资源的URL或者资源的输入流。

而获取class又有两种方式:通过对象实例的getClass()方法或者通过类的静态成员class。

在使用资源文件过程中,有时需要获取资源文件的文件夹路径,也就是以Path的方式获取资源。

于是,容易出错误的地方来了。

我编写一个获取类路径中根目录的方法:

//获取根类路径
public static Path getRootClassPath() {
String p = Util.class.getResource("/").getPath();
if (p.contains(":")) p = p.substring(1);
return Paths.get(p);
}

这样一来,就一步到位获得了根路径的Path。

这样看似完美,实际上却是有瑕疵。

原因在于:类路径和文件路径根本不是一一对应的。

类的根路径对应多个文件夹路径,这多个文件夹路径之间用分号隔开。

所以,你不可能获取类的根路径对应的文件夹路径,而只能获得某个具体资源的文件夹路径

正确姿势如下:

//获取资源的路径
public static Path getResourceAsPath(String resourceName) {
String p = Util.class.getResource(resourceName).getPath();
if (p.contains(":")) p = p.substring(1);
return Paths.get(p);
}

Java获取资源的路径的更多相关文章

  1. Java 获取资源文件路径

    1 问题描述 通过源码运行时,一般使用如下方式读取资源文件: String str = "1.jpg"; 资源文件与源码文件放在同一目录下,或者拥有同一父级目录: String s ...

  2. java获取classpath文件路径空格转变成了转义字符%20的问题

    java获取classpath文件路径空格转变成了转义字符%20的问题 这个问题很纠结,服务器的文件路径带有空格,空格被转化是%20了,悲剧就出现了 下面展示一段代码String path = get ...

  3. java获取文件的路径问题

    java获取文件的路径问题 在java中读取读取文件,经常因为路径的问题找不到,此文用于记录如何定位文件的简单方法. 本基于springboot做的测试,主要是构建工程方便,所用的方法都是JDK中的方 ...

  4. Java获取web项目路径

    File f = new File(WebPath.class.getResource("/").getPath()); String path = f.getParentFile ...

  5. wpf 前台获取资源文件路径问题

    1 <ImageBrush ImageSource="YT.CM.CommonUI;component/Resource/FloadwindowImage/middle.png&quo ...

  6. Java获取配置文件跟路径

    一直以为使用new File(相对路径)可以读取class目录下的文件,其实不然.网上查询了一些资料,弄清楚了原理,总结如下: package com.coshaho.learn; import ja ...

  7. java获取当前文件路径的方法

    第一种: File f = new File(this.getClass().getResource("/").getPath()); System.out.println(f); ...

  8. Java获取资源路径——(八)

     获取文件资源有两种方式: 第一种是: 获取Java项目根目录开始制定文件夹下指定文件,不用类加载器(目录开始要加/) // 获取工程路径 System.out.println(System.getP ...

  9. java获取当前文件路径 [转]

    1.如何获得当前文件路径 常用: 字符串类型:System.getProperty("user.dir"); 综合: package com.zcjl.test.base; imp ...

随机推荐

  1. [Git] 谷歌的代码管理

    copy from : http://www.ruanyifeng.com/blog/2016/07/google-monolithic-source-repository.html https:// ...

  2. PyCharm中Python代码提示:Shadows name from outer scope

    函数内部的变量,如果和函数被调用的外部的变量一样的话,就被PyCharm中叫做shadows name 这样的话,容易引发不容易觉察到的,由于函数内部和外部的变量名一致而引发的一些问题: 比如:内部函 ...

  3. Android开发之Navigationdrawer导航抽屉功能的实现(源码分享)

    导航抽屉(navigationdrawer)是一个从屏幕左边滑入的面板,用于显示应用的主要导航项目.用户能够通过在屏幕左边缘滑入或者触摸操作栏的应用图标打开导航抽屉. 导航抽屉覆盖在内容之上,但不覆盖 ...

  4. MySQL bin-log与主从服务器

    试验环境                                                                                       Ubuntu    ...

  5. rsync同步数据---把左边的文件全部拷贝到右边

    背景,配置好了ssh 使用rsa pulbic key的方式登陆远程服务器.//ssh-keygen -t rsa -b 2048 -f andy-rsync-key -P '' https://he ...

  6. PU-bound(计算密集型) 和I/O bound(I/O密集型)

    转载:https://blog.csdn.net/q_l_s/article/details/51538039 I/O密集型 (CPU-bound) I/O bound 指的是系统的CPU效能相对硬盘 ...

  7. 推荐20个很有帮助的web前端开发教程

    1. CSS Vocabulary 一个伟大的指向和点击的小应用程序,让你加快速度掌握 CSS 语法的各个不同部分,学习各个属性的正确的名称. 2. Liquidapsive 一个简单的信息化布局,通 ...

  8. 封装scrollView 循环滚动,tableViewCell(连载) mvc

    封装 封装 封装 ... 封装的重要性太重要了 给大家在送点干货 从一个项目中抽取出来的.和大家一起分享 封装scrollView 循环滚动.tableViewCell(连载) 明天还会更新 tabl ...

  9. hibernate4.3.10环境搭建

    1.首先还是引入所须要的包 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFC ...

  10. 单页WEB应用(三),Chat聊天模块

    Chat 聊天模块 这个模块应该就是该书全篇的唯一一个模块吧,后面差点儿全部的篇章都环绕这个模块去实现的,只是就通过这一个模块的实现和上线,也能体现单页应用开发到公布上线的整个过程,毕竟后面的数据.通 ...