Java中获取路径的方法

Java中获取路径的方法Java 项目中 1 获取当前项目路径 object class getResource 方法获得当前生成的 class 的绝对路径 此方法在 jar 包中无效 因为他获得的是生成的 class 的路径 返回的内容最

大家好,欢迎来到IT知识分享网。

Java项目中

 1. 获取当前项目路径: object.class.getResource()方法获得当前生成的class的绝对路径(此方法在jar包中无效,因为他获得的是生成的class的路径,返回的内容最后包含/) 如: //当前文件目录路径`Test.class.getResource("").toString();`-->file:/E:/Workspace/study_app/bin/com/legendary/(这种结果需要用substring进行切换)。 如://当前文件目录路径`Test.class.getResource(".").toString()`-->file:/E:/Workspace/study_app/bin/com/legendary/ 如://取得根目录路径 `Test.class.getResource("/").toString();`-->file:/E:/Workspace/study_app/bin/(这种结果需要用substring进行切换) 如://当前目录的上级目录路径 `Test.class.getResource("../").toString();`-->file:/E:/Workspace/study_app/bin/com/ 2. getClass().getResource()方法与【1】一致 

这里写图片描述
3. System.getProperty(“user.dir”);–>获取当前路径,得到项目文件夹的根目录,不带/
4. 使用File提供的函数获取当前路径
这里写图片描述


web项目

  1. jsp中:
    request.getContextPath()
    request.getSession().getServletContext().getRealPath()

    根目录所对应的绝对路径 : request.getRequestURI()
    文件的绝对路径 : application.getRealPath(request.getRequestURI());
    当前web应用的绝对路径 : application.getRealPath(“/”);
    取得请求文件的上层目录:
    newFile(application.getRealPath(request.getRequestURI())).getParent()
  2. servlet中:
    this.getServletContext().getRealPath("/");
    this.getServlet().getServletContext().getRealPath("/");

    根目录所对应的绝对路径:request.getServletPath();
    文件的绝对路径:
    request.getSession().getServletContext().getRealPath(request.getRequestURI())
    当前web应用的绝对路径:
    servletConfig.getServletContext().getRealPath(“/”);
    (ServletContext对象获得几种方式
    javax.servlet.http.HttpSession.getServletContext()
    javax.servlet.jsp.PageContext.getServletContext()
    javax.servlet.ServletConfig.getServletContext()
    )

Jar包

  1. 使用类路径
String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

或者

String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

因为程序已经被打包成jar包,所以getPath()和getFile()在这里的返回值是一样的。都是/xxx/xxx.jar这种形式。如果路径包含Unicode字符,还需要将路径转码

path = java.net.URLDecoder.decode(path, "UTF-8");

2、 使用JVM

String path = System.getProperty("java.class.path");

利用了java运行时的系统属性来得到jar文件位置,也是/xxx/xxx.jar这种形式。
这样,我们就获得了jar包的位置,但是这还不够,我们需要的是jar包的目录。
使用

int firstIndex = path.lastIndexOf(System.getProperty("path.separator")) + 1; int lastIndex = path.lastIndexOf(File.separator) + 1; path = path.substring(firstIndex, lastIndex);

来得到目录。
path.separator在Windows系统下得到;(分号),在Linux下得到:(冒号)。也就是环境变量中常用来分割路径的两个符号,比如在Windows下我们经常设置环境变量PATH=xxxx\xxx;xxx\xxx;这里获得的就是这个分号。
File.separator则是/(斜杠)与\(反斜杠),Windows下是\(反斜杠),Linux下是/(斜杠)。

3、 如何加载jar包中的资源

  1. 比如说我要得到背景图片,源代码中它是

/src/UI/image/background.jpg

那么在jar包中它的路径应该是

/UI/image/background.jpg

路径最前面的/表示根目录,即绝对路径,若没有最左边的/,则表示相对路径。使用哪种方法看自己的需求,这里使用了绝对路径。

加载的时候使用

java.net.URL fileURL = this.getClass().getResource("/UI/image/background.jpg"); javax.swing.Image backGround = new ImageIcon(fileURL).getImage();

即可以获得该图片资源。

2、 有时候,我们需要加载文本资源或音乐资源,而文本在Java中是以流对象存在的,这时我们就要使用

InputStream in = this.getClass().getResourceAsStream("/UI/image/background.txt");

加载该资源。

PS:注意这里两种方法的区别,第一种是先得到该文件的路径,再加载该文件资源。第二种则是直接加载该对象。

3.有时候,我们有一些资源类,其中的资源对象都是pulic static final修饰的,这里可以采用这样的方法初始化。

比如说我有一个ImageSource类用来加载各种图片资源,那么可以如下使用

public class ImageSource { static { URL fileURL = ImageSource.class.getResource(“/UI/image/background.jpg”); BACK_GROUND = new ImageIcon(fileURL).getImage(); } public static final Image BACK_GROUND; }

这里不能用构造函数初始化,因为构造函数和对象相关,而static变量和对象是无关的,只和类相关。在Java的语法中,类中的static块是不依赖类对象的,因此可以初始化statc对象。同时,static块中不能使用this,这里使用了ImageSource.class代替。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/142774.html

(0)
上一篇 2025-05-08 12:45
下一篇 2025-05-08 13:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信