- 浏览: 377365 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
前几天在弄xml的时候, 想通过文件路径来读取项目里的xml配置文件。
在测试的时候没有任何问题, 但是当打包到jar文件里面之后, 再从另一个项目引用的时候,就出错了。
这就是出问题的代码。
当在该项目中运行的时候, 会自动查找源码的路径, 然后就可以通过这个路径来读取源码下的xml文件。
但是当我用maven引用该项目的时候, 这个路径就会被指向到jar文件里面的内容。
比如 pro.jar!/config.xml
这个路径是根本没法读取里面内容的。
=========解决方案========
根据http://www.cnblogs.com/javayuer/archive/2011/01/02/1924192.html的内容以及hibernate源码, 最后找到解决方案。
hibernate的ConfigHelper里面的代码
这里的关键就是getResourceAsStream, 这里的参数和上面URL的参数的区别就是, 这个参数不是绝对路径, 而是通过jar内部的相对路径来获取。
具体怎么一个机制我也不知道, 反正改成这样就没问题了。
而且这里也不需要去通过反射获取绝对路径了, 直接输入文件名称就ok了。
=====================
另外一点, 在eclipse里面的maven项目中, 如图所示, src/main/java下的xml文件是无法通过该方法获取的。(仔细看一下jar包, 发现这个目录下的xml文件根本没有被打包进去)
========================================
10/10更新
这个项目的设计是用xml文件作为数据库, 并且存放在本地硬盘上。
今天试了一下用classloader的getResourceAsStream获取xml, 大概明白了。
由于数据库是在硬盘上, 所以要获取这个inputstream其实很简单,
InputStream stream=new FileInputStream(filepath);
这样就行了。 也就是说输入绝对路径便可以获取了。
而对于项目系统内部的配置文件,就不能这样了。 必须用反射。
classloader在这里就起到了作用。
在测试的时候没有任何问题, 但是当打包到jar文件里面之后, 再从另一个项目引用的时候,就出错了。
private static String getPathByName(String name,Class<?> clz){ URL url=clz.getClassLoader().getResource(name); System.out.println("url = "+url); String result=url.getPath(); System.out.println(url.getPath()); return result; }
这就是出问题的代码。
当在该项目中运行的时候, 会自动查找源码的路径, 然后就可以通过这个路径来读取源码下的xml文件。
但是当我用maven引用该项目的时候, 这个路径就会被指向到jar文件里面的内容。
比如 pro.jar!/config.xml
这个路径是根本没法读取里面内容的。
=========解决方案========
根据http://www.cnblogs.com/javayuer/archive/2011/01/02/1924192.html的内容以及hibernate源码, 最后找到解决方案。
hibernate的ConfigHelper里面的代码
public static InputStream getResourceAsStream(String resource) { String stripped = resource.startsWith("/") ? resource.substring(1) : resource; InputStream stream = null; ClassLoader classLoader = ClassLoaderHelper.getContextClassLoader(); if (classLoader!=null) { stream = classLoader.getResourceAsStream( stripped ); } if ( stream == null ) { stream = Environment.class.getResourceAsStream( resource ); } if ( stream == null ) { stream = Environment.class.getClassLoader().getResourceAsStream( stripped ); } if ( stream == null ) { throw new HibernateException( resource + " not found" ); } return stream; }
这里的关键就是getResourceAsStream, 这里的参数和上面URL的参数的区别就是, 这个参数不是绝对路径, 而是通过jar内部的相对路径来获取。
具体怎么一个机制我也不知道, 反正改成这样就没问题了。
public static Document getDocByFileStream(String fileName,Class<?>clz){ // String path=PathUtil.getPathByName(fileName, clz); SAXReader reader=new SAXReader(); Document doc=null; try { // doc=reader.read(new FileInputStream(new File(path))); doc=reader.read(PathUtil.class.getClassLoader().getResourceAsStream(fileName)); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } return doc; }
而且这里也不需要去通过反射获取绝对路径了, 直接输入文件名称就ok了。
=====================
另外一点, 在eclipse里面的maven项目中, 如图所示, src/main/java下的xml文件是无法通过该方法获取的。(仔细看一下jar包, 发现这个目录下的xml文件根本没有被打包进去)
========================================
10/10更新
这个项目的设计是用xml文件作为数据库, 并且存放在本地硬盘上。
今天试了一下用classloader的getResourceAsStream获取xml, 大概明白了。
由于数据库是在硬盘上, 所以要获取这个inputstream其实很简单,
InputStream stream=new FileInputStream(filepath);
这样就行了。 也就是说输入绝对路径便可以获取了。
而对于项目系统内部的配置文件,就不能这样了。 必须用反射。
classloader在这里就起到了作用。
发表评论
-
重装系统,myeclipse里面maven路径的问题
2014-10-21 13:30 928Can't find Maven installation ... -
maven将jar包和源码一起打包到本地仓库
2014-09-24 10:35 3318http://stackoverflow.com/questi ... -
maven导出可依赖jar包
2014-07-31 18:33 867http://wmljava.iteye.com/blog/1 ... -
maven编译可执行jar包
2014-07-11 14:09 939http://stackoverflow.com/questi ... -
error in opening zip file
2014-04-16 22:38 849启动maven的时候报了如标题的错误。 这里的原因是jar包 ... -
Maven+myeclipse 打包war文件的问题
2014-03-01 17:23 3594今天把maven的项目打包成war并发布到tomcat中。 结 ... -
maven指令笔记
2013-12-17 12:25 0mvn install -Dmaven.test.skip=t ... -
Maven搭配webapp环境
2013-12-02 14:41 9251.首先在MyEclipse中new一个Maven项目。 在A ... -
包含日期的xml文件, 以及xml日期对象转换成java Date对象
2013-11-10 21:12 2574首先是schema文件。 <? ... -
dom4j通过ElementIterator对xml节点进行遍历
2013-11-09 22:09 1116xml文件: <students> <st ... -
UTF-8 序列的字节 1 无效
2013-11-08 11:19 3045用dom4j操作xml文件, 出现了这个错误。 原因是xml ... -
maven项目中jetty插件的部署
2013-10-28 22:24 835<project xmlns="http:// ... -
dom4j操作xml笔记
2013-10-28 11:50 849首先是读取xml文件。 SAXReader reader=ne ... -
[转] maven中如何打包源代码
2013-10-16 17:52 146原帖地址:http://blog.csdn.net/symgd ... -
maven中打包项目源代码,以及中文注释乱码问题解决
2013-10-12 21:19 6506如果要在Myeclipse里面对项目进行打包, 首先确保在ma ... -
schema简单实例
2013-10-06 18:10 1008首先是一个xml文件。 <?xml version=&q ...
相关推荐
要从JAR文件中读取内容,Java提供了一个内置的`java.util.jar`包,其中包含`JarFile`和`JarEntry`类。以下是一步步实现这个功能的方法: 1. **打开JAR文件**:使用`JarFile`类的构造函数,传入JAR文件的路径。这将...
在Java编程中,读取jar包内的文件是一个常见的需求,特别是在运行时动态加载资源或类文件时。Java提供了一种内置的方式,通过`java.util.jar`包中的`JarFile`和`JarInputStream`类来实现这个功能。下面将详细介绍...
标题"读取war包或jar包内的文件"涉及到的知识点主要是如何在程序中动态地获取并读取这些归档文件中的内容,这对于理解和处理Java应用的部署和运行至关重要。这篇博客(虽然链接未提供具体内容)可能探讨了以下关键点...
在SpringBoot应用中,文件读取是一个常见的需求,但在打包成jar文件并部署后,由于文件不再位于文件系统中,而是被包含在jar包内部,所以传统的文件读取方式会失效。本文将深入探讨如何解决SpringBoot jar包中的文件...
总结来说,从JAR包中读取图片涉及对Java类路径的理解,以及正确使用`getResource()`或`getResourceAsStream()`方法。在实际项目中,这通常是通过封装在静态方法或工具类中,以便在多个地方复用。对于开发者来说,...
此外,如果你需要频繁地从JAR中读取资源,可以考虑使用`Class.getResourceAsStream()`或`ClassLoader.getResourceAsStream()`方法,它们允许你通过类路径(相对于类或类加载器)访问资源,而无需显式打开`JarFile`。...
System.out.println("File not found in the JAR."); } } catch (IOException e) { e.printStackTrace(); } ``` 6. **优化性能**: - 如果需要频繁访问JAR内的文件,考虑使用`JarURLConnection`和`...
下面我们将详细探讨如何在Eclipse中打包JAR包,并读取外部JAR包和外部配置文件。 首先,我们需要了解JAR文件的结构。JAR文件是Java类文件和相关资源的容器,它们被组织成目录结构,类似于Unix或Windows的文件系统。...
### 读取jar文件中的资源知识点 #### 一、引言 在开发过程中,经常会遇到需要从jar包中读取资源文件(如图片、音频等)的情况。这涉及到如何定位和访问这些文件的问题。本文将深入探讨如何在Java环境中有效地处理这...
SpringBoot读取war包jar包和Resource资源 SpringBoot 中读取 war 包 jar 包和 Resource 资源是开发过程中的常见问题。下面是相关知识点的总结: 1. ClassLoader 获取资源文件 在 SpringBoot 项目中,使用 ...
【标题】"ibatis 的 jar包" 在Java开发中,iBATIS是一个强大的持久层框架,它能够将SQL语句与Java代码分离,提供了一种简单但有效的对象关系映射解决方案。这个“ibatis-2.3.4.726.jar”文件是iBATIS框架的一个特定...
在标题和描述中提到的问题,是关于如何在Java应用中,特别是当XML文件被包含在JAR包内时,如何使用DOM4J进行读取。这个问题的关键在于理解Java类加载器(ClassLoader)的工作原理,以及如何利用它来访问JAR包内的...
- 使用SqlSessionFactoryBuilder读取mybatis-config.xml文件,创建SqlSessionFactory实例。 - 代码示例: ```java InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); ...
### JAVA打包后读取自身JAR中的文件 #### 背景介绍 在Java开发过程中,经常需要将项目...通过上述解决方案和注意事项,可以在Java程序中正确地处理打包后的JAR文件中的资源文件读取问题,确保程序的稳定性和可靠性。
这一步可以通过添加Dom4j的jar包至项目的类路径中实现。如果你使用的是Maven或者Gradle等构建工具,则可以在pom.xml或build.gradle文件中添加相应的依赖。 #### 三、示例代码解析 本节将对给定的部分内容进行详细...
Ibatisjar包是Java开发中的一个关键组件,主要用于简化数据库操作。它是一个轻量级的持久层框架,由Clinton Begin创建,并在2005年首次发布。Ibatis这个名字来源于"i"(互联网)和"bati"(基础数据访问工具),它...
虽然这个包主要用于处理文件系统路径,但也可以通过`FileSystem`和`Path`接口来读取JAR中的资源: ```java Path jarPath = Paths.get("path_to_your_jar.jar"); FileSystem fs = FileSystems.newFileSystem(jarPath...
XML用于保存及交换数据,与读取配置文件的类在同一包,或在WEB-INF(或其子目录下),// 读取配置文件获得一个输入流 InputStream is = Demo1.class.getResourceAsStream("/students.xml");// src目录下 // 1. 获得...
在Java开发中,"附带资源的jar包"是一个常见的概念,它指的是包含有除了Java类文件之外的其他资源文件的Java Archive (JAR) 文件。这种jar包不仅封装了可执行的Java代码,还包含了运行时需要的各种资源,如图片、...