前端时间,需要将java代码打成可运行的jar包,jar内的代码需要读取外部的配置文件。在处理路径上,花了点时间,先整理一下:
jar读取内部外部文件的方式:
可参考这个 博客http://www.iteye.com/topic/483115,不能把jar理解成一个文件夹,因此不能通过常规的文件路径方式来读取 jar内部的文件。例如 xml文件、dll文件等。如果希望打包时将一些文件打入jar包,无论jar部署在哪,都能读取jar内文件的话,就需要修改 jar内代码读取文件的方式:
读取jar内文件需要 getRescourAsStrean的方式:
//返回读取指定资源的输入流
InputStream is=this.getClass().getResourceAsStream("/resource/res.txt");
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String s="";
while((s=br.readLine())!=null)
System.out.println(s);
需要注意的是 需要将文件建在类路径下,如src下,打包时,才能打到jar包内。
如果jar包内代码引用了第三方的jar,打包时,需要通过fatJar插件,将第三方jar解压,按类的结构放在和自己代码同级的目录下,自己的代码才能根据类的路径,找到第三方类。fatJar自动做了这些事。
读取jar外的文件。可参见一博客:http://tomfish88.iteye.com/blog/971255
读取jar外的文件灵活的方式首先获取当前jar运行的路径,该路径即类路径。通过类路径获取jar外部的文件。
获取类路径的方式可通过找当前运行的类的文件位置来找:(PathUtil 为自定义的获取类路径的工具类)
网上推荐方式整理:
(1)classPath = PathUtil.class.getClass().getResource("/").getPath().replaceAll("%20", " ");
(2)classPath=ClassLoader.getSystemResource("").getPath().replaceAll("%20", " ");
(3)classPath=System.getProperty("user.dir")
(4)classPath=new File("").getAbsolutePath()
(5)classPath=Thread.currentThread().getContextClassLoader().getResource("").getPath().replaceAll("%20", " ");
(6)classPath=PathUtil.class.getClassLoader().getResource("").getPath().replaceAll("%20", " ");
经实际打包运行测试,只有 1 和2 能在打包运行环境下获取到正确的类路径。其他或者报错、或者获取到其他的路径了。原因还望赐教,没深入细研究。
另外对于 (1),网上有好多的写法,如:PathUtil.getClass().getResource("/").getPath().replaceAll("%20", " ");
该写法在Eclipse下运行和实际打包运行时,个人测试,实际打包运行会报错。对于java内部如何寻找ClassLoader类,不是很明白,所以也不清楚各种写法的报错原因。
另外就是 getResource获取的URL路径,空格处是用20%代替的,而File的方式处理绝对路径时不识别20%,因此需要对20%做处理。
Spring加载xml时采用了同样的方式处理xml文件,因此 有spring配置的jar,读spring配置文件时,既可以读取jar内部的xml文件,也可以读取与jar在同一目录的外部xmL文件。log4j同样。
分享到:
相关推荐
在进行Java开发时,文件路径处理一直是令人头疼的问题之一。特别是在涉及跨平台或在不同环境中部署的应用程序时,路径问题更是频繁出现。本文旨在深入探讨Java路径问题,并提供一种有效且通用的解决方案。 #### 二...
本文将深入探讨Java路径解决方案,旨在帮助开发者理解和解决与此相关的各种问题。 首先,我们来了解一下Java中的类路径(Classpath)。类路径是Java虚拟机(JVM)寻找类文件的路径集合,它决定了哪些目录和.jar文件...
在Java编程中,处理中文路径问题是一个常见的挑战,尤其是在Windows操作系统环境下。中文字符在路径中可能会引起编码问题,导致程序无法正确读取或写入文件。这个问题主要涉及到字符编码、文件I/O操作以及系统环境的...
2. Java API中的路径处理 - `java.io.File`类是处理文件和目录的主要工具,提供了创建、删除、重命名文件的方法,并且可以获取文件的绝对路径和父路径。 - `java.nio.file.Paths`和`java.nio.file.Path`类在Java 7...
在Java开发中,经常会遇到需要获取文件路径的情况,尤其是在处理配置文件、图片等资源时。本文将详细介绍Java中获取文件路径的各种方法及其应用场景,帮助开发者更好地理解和掌握这些技巧。 #### 二、基本概念 在...
- 不同的Web容器对路径的处理可能有所不同: - **WebLogic** - WebLogic中,如果使用相对路径加载配置文件,通常需要指定具体的路径。 - **Tomcat** - `System.getProperty("user.dir")` 指向的是 Tomcat 的 ...
在Java开发中,路径处理是常见且重要的环节,尤其是在Web应用中,正确处理各种路径能够确保资源的准确访问和系统的稳定运行。以下是对标题“JAVA中获取各种路径”及其描述和部分内答所提及的几种路径获取方法的详细...
本文将深入探讨Java中的路径问题,并提供一个有效的解决方案,该方案旨在简化路径处理过程,使得开发者能够更加灵活地管理和访问不同环境下的资源。 #### 二、Java路径类型 Java中使用的路径主要分为两大类:绝对...
在Java中实现Floyd算法,可以方便地处理具有负权边的图,只要图中不存在负权回路即可。 **算法流程** 1. 初始化:创建一个n×n的二维数组distance,其中distance[i][j]表示顶点i到顶点j的最短距离。对于非对角线...
### Java路径获取方法详解 #### 一、概述 在Java编程中,经常需要处理文件路径问题,特别是当涉及到Web应用程序时。Java提供了多种方法来获取虚拟路径与物理路径,这对于文件操作至关重要。本文将详细介绍几种获取...
本文将深入探讨Java中的相对路径,这是在处理文件和目录时经常会遇到的一个关键主题。相对路径是相对于当前工作目录或某个已知起点的文件或目录的路径表示方式,与绝对路径(完整描述文件或目录位置的路径)相比,...
在Java中,路径处理主要由java.io和java.nio.file包中的类来支持。本篇文章将详细探讨Java中如何获取和操作路径。 首先,我们来看`IPrinter.java`可能是一个接口,用于定义打印路径的方法,例如: ```java public ...
java 文件路径小工具 谁用谁知道 管理windows下的目录文件
Java版的ArcGIS路径分析是GIS(地理信息系统)领域中的一种关键应用,它结合了Java编程语言的强大功能和ArcGIS的地理处理能力,用于解决复杂的网络分析问题,特别是寻找最优化的路线。在这个系统中,我们可以对交通...
本篇将详细探讨Java中的文件路径处理技术,主要涵盖以下知识点: 1. **File类**: Java中的`java.io.File`类是用于表示文件和目录路径名的抽象表示。它提供了许多操作,如创建、删除、重命名文件和目录,以及获取...
本主题聚焦于使用Java实现求解迷宫最短路径的算法。在给定的压缩包中,包含两个文件:ShortPath.java和Position.java,它们分别代表了核心算法和坐标位置的数据结构。 首先,`Position.java`文件可能定义了一个类,...
使用`java.nio.file.Paths`类的`get()`方法,结合系统属性,可以安全地获取桌面路径,处理不同操作系统的差异: ```java Path desktopPath = Paths.get(System.getProperty("user.home"), "Desktop"); ``` 这个...
2. **处理数据**:根据所选的最短路径算法处理图数据,计算最短路径。 3. **写入输出文件**:使用`PrintWriter`类将计算结果写入新的文件。输出可能包括每个节点到其他所有节点的最短路径,或者特定两个节点间的...