Java 读取jar内的文件的超简便方法

坑爹的java课程设计,偏要用jar来运行

读取、存储jar内文件的支持也好低

存储方法:

进入jar文件其实没有说的那么困难,jar文件本质是一个zip格式的压缩文件,只是把文件后缀名改了,要用Java读取里面的文件也没有那么想象的那么困难。使用相关协议就可以: 例如:c盘根目录有一个test.jar文件文件里面有个a.txt文件我们就读取这个a.txt文件 文件对应的URL: 
jar:file:/C:/test.jar!/a.txt 


 1 import java.io.IOException;
 2 import java.io.InputStream;
 3 import java.net.URL;
 4
 5 public class TestDouble {
 6 public static void main(String[] args) throws IOException {
 7 URL url=new URL("jar:file:/C:/test.jar!/a.txt");
 8 System.out.println(url);
 9 InputStream is=url.openStream();
10 byte b[]=new byte[1000];
11 is.read(b);
12 System.out.println(new String(b).trim());
13 }
14 }

如果想不依赖绝对路径,那就先获取运行jar时候的当前绝对路径,然后加上要读的目录

把方法内换一下

        String jarPath = Main.class.getProtectionDomain().getCodeSource().getLocation().getFile();
        URL url=new URL("jar:file:" + jarPath + "!/in.txt"); 
关于存储。jar的设计理念就是一个只读文件,查了java文档,有个java.util.jar.JarOutputString,不过不是很好用
时间: 2024-10-25 03:45:52

Java 读取jar内的文件的超简便方法的相关文章

Java读取jar包资源文件

把java项目打包成jar包,如果jar包中存在资源文件需要访问,需要采取stream的形式访问,可以调用getResourceAsStream()方法,而不能采用路径的方式访问(文件已经被打到jar里面了,不符合路径的).使用getResourceAsStream()方法文件可以有两种方式存放: (1)文件存放在src的类路径下. (2)文件存放在资源文件夹下面,通过Build Path-Use as Source Folder来把普通文件夹变成资源文件夹. 如图,把testA打包成jar包,

Java读取Level-1行情dbf文件极致优化(3)

最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1行情没有Level-2快,但是作为系统支持的行情源,我们还是需要优化它,使得从文件读取,到用户通过socket收到行情,端到端的时延尽可能的低.本文主要介绍对level-1行情dbf文件读取的极致优化方案.相信对其他的dbf文件读取应该也有借鉴意义. Level-1行情是由行情小站,定时每隔几秒把d

用shade 打包,过滤掉一些不想打进big jar内的文件

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals&

Java读取Level-1行情dbf文件极致优化(2)

最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1行情没有Level-2快,但是作为系统支持的行情源,我们还是需要优化它,使得从文件读取,到用户通过socket收到行情,端到端的时延尽可能的低.本文主要介绍对level-1行情dbf文件读取的极致优化方案.相信对其他的dbf文件读取应该也有借鉴意义. Level-1行情是由行情小站,定时每隔几秒把d

java 读取并且显示 txt 文件

系统:mac os x 10.9 eclipse 在eclipse 中建立一个project, 命名为Cin_txt, Cin_txt的内容 test wang hello world 以下是输入的代码 import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class Cin_txt { public static void main(String[] args) { Fil

换了应用部署环境,读取jar包中文件遇到的问题。

程序换了个tomcat部署出现了问题,在原来的系统里好好的.最后定位问题发现是使用dom4j读取jar包中文件出现的问题,dom4j的异常是:org.dom4j.DocumentException: null Nested exception: null,经过观察发现拿到的InputStream对象为空.再追代码发现是因为JarFile压根就没有读到文件.顺手换成了当前线程上下文去读取文件,这次抛出的异常很清楚,jar文件找不到.最近经过观察发现是引文文件路径中存在空格,这是和原来系统不同的地方

java web 程序---内置对象application的log方法的使用

application的主要方法里,有log方法,是日志文件里可以查看到信息的. 当老师写好代码后,他发现在tomact里的log目录下找不到信息,原因是:我们用myeclipse这个客户端软件,应该把服务器关闭,而是去bin目录下,手动开启服务器 即startup.bat.这个文件,然后在log目录下查到了信息: 这里有截图,我输入的用户名,这里当程序运行后是个空白页面,只有到log目录下才可以查看到信息. 代码: login.jsp ? 1 2 3 4 5 6 7 <body>     &

java读取UTF-8的txt文件发现开头的一个字符问题

今天遇到一个奇葩问题,在读取一个TXT文件时,出现开头多了一个问号(?).如下图: 莫名奇妙的多了一个.最后通过网上资料,知道在Java中,class文件采用utf8的编码方式,JVM运行时采用utf16.Java的字符串是永远都是unicode的,采用的是UTF-16的编码方式. 想测试一下,java对UTF-8文件的读写的能力,结果发现了一个很郁闷的问题,如果通过java写的UTF-8文件,使用Java可以正确的读,但是如果用记事本将相同的内容使用UTF-8格式保存,则在使用程序读取是会从文

Java读取Level-1行情dbf文件极致优化(1)

最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1行情没有Level-2快,但是作为系统支持的行情源,我们还是需要优化它,使得从文件读取,到用户通过socket收到行情,端到端的时延尽可能的低.本文主要介绍对level-1行情dbf文件读取的极致优化方案.相信对其他的dbf文件读取应该也有借鉴意义. Level-1行情是由行情小站,定时每隔几秒把d