java工程中的相关路径

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 一、路径   绝对路径: 指的是文件在系统中的真实路径(物理路径)。   相对路径: 指的是文件相对某个目录的相对路径。   对于java application 工程来说,当编写完一个类之后,class文件会编译,默认存放在bin目录中。

一、路径

  绝对路径: 指的是文件在系统中的真实路径(物理路径)。
  相对路径: 指的是文件相对某个目录的相对路径。
  对于java application 工程来说,当编写完一个类之后,class文件会编译,默认存放在bin目录中。
存放的目录结构安装包的命名依次存放。同时一些在src目录,或其他Source Fodder目录中的资源文件也会被编译到bin目录中(有些构建的不是存放在bin目录中,这根据构建工具而异)。

  而当程序运行的时候,执行的就是bin目录中的class文件,读取的资源文件也是bin目录中的。
对于java web 工程来说,当编写完一个类之后,class文件默认会被编译到这个web工程下的Webapp目录下的WEB-INF生成的classes目录中。
存放的目录结构安装包的命名依次存放。同样一些在src目录,或其他Source Fodder目录中的资源文件也会被编译到classes目录中。

  而我们对路径的操作基本上是基于class文件所在的目录进行的。

二、示例

  1、通过class 与 ClassLoader获取路径

 1     //testapp为工程名称
 2     // 返回编译后的class-path路径 
 3     //路径:    /D:/web-create/testapp/target/classes/
 4     System.out.println(Thread.currentThread().getContextClassLoader().getResource("").getPath()); 
 5     //路径:    /D:/web-create/testapp/target/classes/com                 此处的com目录必须要存在,否则会抛异常
 6     System.out.println(ClassLoader.getSystemResource("com").getPath());                
 7     //路径: /D:/web-create/testapp/target/classes/                    编译代码后的classes路径             
 8     System.out.println(ClassLoader.getSystemResource("").getPath());     
 9     //路径:    /D:/web-create/testapp/target/classes/                  编译代码后的classes路径 
10     System.out.println(Test.class.getResource("/").getPath());            
11     //路径: /D:/web-create/testapp/target/classes/com/                Test.class文件所在路径 
12     System.out.println(Test.class.getResource("").getPath());            
13     //路径: /D:/web-create/testapp/target/classes/com/Test.class    Test.class文件全路径
14     System.out.println(Test.class.getResource("Test.class").getPath()); 

  2、webapp中通过request,session等获取路径

 1     HttpServletRequest request = null;
 2     ///返回web应用名称:         testapp    
 3     System.out.println(request.getContextPath());
 4     
 5     // 当前web应用的绝对路径(后面没有\)   E:/web-create\testapp\src\main\resources\webapp
 6     System.out.println(request.getSession().getServletContext().getRealPath(""));
 7 
 8     // 当前web应用的绝对路径(后面有\)     E:/web-create\testapp\src\main\resources\webapp\
 9     System.out.println(request.getSession().getServletContext().getRealPath("/"));        
10     
11     // 当前web应用中指定目录绝对路径         E:/web-create\testapp\src\main\resources\webapp\resource\image  
12     System.out.println(request.getSession().getServletContext().getRealPath("/resource/image")); 
13 
14     //获取PATH目录下的子目录以集合的形式返回():[/resource/image/2015/]
15     System.out.println(request.getSession().getServletContext().getResourcePaths("/resource/image"));
16 
17     // 当前web应用中指定目录绝对路径         E:/web-create\testapp\src\main\resources\webapp\resource\image
18     System.out.println(request.getRealPath("/resource/image"));// 不建议使用,用 ServletContext.getRealPath()方法代替

  3、文件相关路径

    //路径: D:\   工程所在根目录
    System.out.println(new File("/").getAbsolutePath());      
    //路径: D:\web-create\testapp\com
    System.out.println(new File("com").getAbsolutePath());  
    //路径:D:\web-create\testapp 
    System.out.println(new File("").getAbsolutePath());      
    //路径:D:\web-create\testapp
    System.out.println(System.getProperty("user.dir"));  
    // class path 路径
    System.out.println(System.getProperty("java.class.path")); 

  4、加载src(实际上是bin目录或classes目录下的)下的properties

 1     //加载文件相关
 2     InputStream is = new FileInputStream(ClassLoader.getSystemResource("").getPath() + "config.redis.pool.properties");//该种方式与下面得到的结果一致
 3     is = Test.class.getResourceAsStream("config.redis.pool.properties");//与下面结果一样
 4     is = Test.class.getResourceAsStream("/config.redis.pool.properties");
 5     //InputStream is = Test.class.getResourceAsStream("/com/config.redis.pool.properties");//参数是相对于classes目录下的文件全路径
 6     Properties properties = new Properties();
 7     properties.load(is);
 8     is.close();
 9     for(Object obj :properties.keySet()){
10         System.out.println("key: " + obj + " value: " + properties.get(obj));
11     }  
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
69 9
|
13天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
77 34
|
1月前
|
Java Android开发
Eclipse Java 构建路径
Eclipse Java 构建路径
36 3
|
2月前
|
IDE Java 编译器
Java:如何确定编译和运行时类路径是否一致
类路径(Classpath)是JVM用于查找类文件的路径列表,对编译和运行Java程序至关重要。编译时通过`javac -classpath`指定,运行时通过`java -classpath`指定。IDE如Eclipse和IntelliJ IDEA也提供界面管理类路径。确保编译和运行时类路径一致,特别是外部库和项目内部类的路径设置。
181 5
|
2月前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
67 2
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
|
3月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
57 4
|
3月前
|
域名解析 分布式计算 网络协议
java遍历hdfs路径信息,报错EOFException
java遍历hdfs路径信息,报错EOFException
42 3
|
4月前
|
Java Android开发
如何使用IDEA创建一个简单的java工程?
这篇文章提供了使用IntelliJ IDEA创建简单Java工程的步骤,包括在`src`目录下建立两个特定的包。
如何使用IDEA创建一个简单的java工程?
|
5月前
|
前端开发 JavaScript 安全
|
5月前
|
Java Scala 流计算
实时计算 Flink版产品使用问题之Docker镜像中的Java路径和容器内的Java路径不一致,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。