- 浏览: 357552 次
- 性别:
- 来自: 广东珠海
文章分类
最新评论
-
cuiyijing:
[size=small]马士兵 26_homework_dml ...
SQL面试题 -
utobe:
兄弟 你真的出名了,尚学堂 oracle 马士兵的视频拿你的题 ...
SQL面试题 -
tlqtangok:
没看懂,能解释一下吗?
安装Oracle后java的jvm会报错 -
a114d:
itling 写道尚学堂的demo楼上威武
hibernate 全面学习【hibernate抓取策略 】 -
wohenshuaiba:
不错,但是没写return checkimg( this ); ...
图片上传
我们知道,用ZIP,jar可以将多个文件一起打包,如classes,images etc. 其实我们可以用J2SE的SDK提供的Jar命令来创建Jar文件,尽管我们可以通过该命令添加一个文件到Jar包中,但我们没有很直接的办法在程序中这么做,也没有办法通过Jar命令在Jar中删除一个或多个文件,
下面我们来研究一下如何更新一个Jar:要更新一个Jar,你必须创建原Jar文件的一个拷贝,在我们更新完拷贝后移除原文件,然后将拷贝重命名为原文件名就可以了。(译者注:我曾经试图找过更直接的办法,但是徒劳。只是找到这篇文章的原文) 对于添加一个或多个文件,删除一个或多个文件,思路应该是一样的。我们将举例更新一个Jar文件。
首先我们应该知道如何列出Jar文件中的Entries:
JarFile jar = new JarFile(name); Enumeration e = jar.entries(); while (e.hasMoreElements()) { System.out.println("\t" + entry.getName()); }
然后我们要知道如何写入Jar文件
while (entries.hasMoreElements()) { JarEntry entry = (JarEntry) entries.nextElement(); InputStream is = jar.getInputStream(entry); newJar.putNextEntry(entry); while ((bytesRead = is.read(buffer)) != -1) { newJar.write(buffer, 0, bytesRead); } }
这里的输出是一个JarOutputStream
File tempJar = File.createTempFile(nameOfJar, null); JarOutputStream newJar = new JarOutputStream( new FileOutputStream(tempJar));
在确定更新成功时,我们不要忘记删除原文件,并重新命名临时文件。
if (success) { File origFile = new File(nameOfJar); origFile.delete(); tempJar.renameTo(origFile); }
下边我们将给出完整的代码:
import java.io.*; import java.util.*; import java.util.zip.*; import java.util.jar.*; public class AddFileToJar { public static void main(String args[]) { if (args.length != 2) { System.err.println( "command: java AddFileToJar example.jar filetoadd.txt"); System.exit(-1); } String nameOfJar = args[0]; String nameToAdd = args[1]; File tempJar = null; try { tempJar = File.createTempFile(nameOfJar, null); } catch (IOException e) { System.err.println("Unable to create intermediate file."); System.exit(-2); } JarFile jar = null; try { jar = new JarFile(nameOfJar); } catch (IOException e) { System.err.println("Unable to access original file."); System.exit(-3); } // Only rename file at end on success boolean success = false; try { JarOutputStream newJar = new JarOutputStream( new FileOutputStream(tempJar)); byte buffer[] = new byte[1024]; int bytesRead; try { FileInputStream fis = new FileInputStream(nameToAdd); // Add back the original files Enumeration entries = jar.entries(); while (entries.hasMoreElements()) { // Prompt for copy JarEntry entry = (JarEntry) entries.nextElement(); String name = entry.getName(); System.out.println ("Copy " + name + " into new jar? (y or n)"); BufferedReader reader = new BufferedReader (new InputStreamReader(System.in)); String line = reader.readLine(); if ("n".equals(line)) { // if user enters n, don't copy file, // move to next name System.out.println("Skipping: " + name); continue; } InputStream is = jar.getInputStream(entry); newJar.putNextEntry(entry); while ((bytesRead = is.read(buffer)) != -1) { newJar.write(buffer, 0, bytesRead); } } // Add new file last try { JarEntry entry = new JarEntry(nameToAdd); newJar.putNextEntry(entry); while ((bytesRead = fis.read(buffer)) != -1) { newJar.write(buffer, 0, bytesRead); } } finally { fis.close(); } success = true; } catch (IOException ex) { System.err.println ("Operation aborted due to : " + ex); } finally { try { newJar.close(); } catch (IOException ignored) { } } } catch (IOException ex) { System.err.println( "Can't access new file"); } finally { try { jar.close(); } catch (IOException ignored) { } if (!success) { tempJar.delete(); } } if (success) { File origFile = new File(nameOfJar); origFile.delete(); tempJar.renameTo(origFile); } } }
下面我们来研究一下如何更新一个Jar:要更新一个Jar,你必须创建原Jar文件的一个拷贝,在我们更新完拷贝后移除原文件,然后将拷贝重命名为原文件名就可以了。(译者注:我曾经试图找过更直接的办法,但是徒劳。只是找到这篇文章的原文) 对于添加一个或多个文件,删除一个或多个文件,思路应该是一样的。我们将举例更新一个Jar文件。
首先我们应该知道如何列出Jar文件中的Entries:
JarFile jar = new JarFile(name); Enumeration e = jar.entries(); while (e.hasMoreElements()) { System.out.println("\t" + entry.getName()); }
然后我们要知道如何写入Jar文件
while (entries.hasMoreElements()) { JarEntry entry = (JarEntry) entries.nextElement(); InputStream is = jar.getInputStream(entry); newJar.putNextEntry(entry); while ((bytesRead = is.read(buffer)) != -1) { newJar.write(buffer, 0, bytesRead); } }
这里的输出是一个JarOutputStream
File tempJar = File.createTempFile(nameOfJar, null); JarOutputStream newJar = new JarOutputStream( new FileOutputStream(tempJar));
在确定更新成功时,我们不要忘记删除原文件,并重新命名临时文件。
if (success) { File origFile = new File(nameOfJar); origFile.delete(); tempJar.renameTo(origFile); }
下边我们将给出完整的代码:
import java.io.*; import java.util.*; import java.util.zip.*; import java.util.jar.*; public class AddFileToJar { public static void main(String args[]) { if (args.length != 2) { System.err.println( "command: java AddFileToJar example.jar filetoadd.txt"); System.exit(-1); } String nameOfJar = args[0]; String nameToAdd = args[1]; File tempJar = null; try { tempJar = File.createTempFile(nameOfJar, null); } catch (IOException e) { System.err.println("Unable to create intermediate file."); System.exit(-2); } JarFile jar = null; try { jar = new JarFile(nameOfJar); } catch (IOException e) { System.err.println("Unable to access original file."); System.exit(-3); } // Only rename file at end on success boolean success = false; try { JarOutputStream newJar = new JarOutputStream( new FileOutputStream(tempJar)); byte buffer[] = new byte[1024]; int bytesRead; try { FileInputStream fis = new FileInputStream(nameToAdd); // Add back the original files Enumeration entries = jar.entries(); while (entries.hasMoreElements()) { // Prompt for copy JarEntry entry = (JarEntry) entries.nextElement(); String name = entry.getName(); System.out.println ("Copy " + name + " into new jar? (y or n)"); BufferedReader reader = new BufferedReader (new InputStreamReader(System.in)); String line = reader.readLine(); if ("n".equals(line)) { // if user enters n, don't copy file, // move to next name System.out.println("Skipping: " + name); continue; } InputStream is = jar.getInputStream(entry); newJar.putNextEntry(entry); while ((bytesRead = is.read(buffer)) != -1) { newJar.write(buffer, 0, bytesRead); } } // Add new file last try { JarEntry entry = new JarEntry(nameToAdd); newJar.putNextEntry(entry); while ((bytesRead = fis.read(buffer)) != -1) { newJar.write(buffer, 0, bytesRead); } } finally { fis.close(); } success = true; } catch (IOException ex) { System.err.println ("Operation aborted due to : " + ex); } finally { try { newJar.close(); } catch (IOException ignored) { } } } catch (IOException ex) { System.err.println( "Can't access new file"); } finally { try { jar.close(); } catch (IOException ignored) { } if (!success) { tempJar.delete(); } } if (success) { File origFile = new File(nameOfJar); origFile.delete(); tempJar.renameTo(origFile); } } }
发表评论
-
aspect jar包
2013-06-17 14:35 999aspectj需要的jar包 -
mockejb
2012-04-28 14:37 0<?xml version="1.0" ... -
ohfp
2012-04-20 17:58 0Hi All, Thanks a lot for your ... -
conditional import
2012-04-20 13:19 0Introduction In RBP, single c ... -
datasource
2012-04-12 15:38 0import java.util.ArrayList; imp ... -
java
2012-03-23 12:59 0package com.hsbc.esf.cache.impl ... -
java
2012-03-23 12:57 0package com.hsbc.esf.cache.impl ... -
java
2012-03-23 11:52 0package com.hsbc.esf.cache; im ... -
java
2012-03-07 11:40 0XmlTestUtil public final class ... -
trace
2012-03-07 11:28 0AbstractFormatter import java ... -
求能够在pdf最后一页加上统计所有本页合计的数量
2008-12-07 14:21 2466请教各们同仁.怎么能够控制到itext 生成最后一页的时候.加 ... -
EAM系统(MAXIMO)石油天然气行业解决方案
2008-07-24 13:50 2658EAM系统(MAXIMO)石油天 ... -
深入浅出java Io
2007-04-01 13:57 2151一.Input和Output 1.stream代 ... -
java中timer用法
2007-04-01 13:15 8647所有类型的 Java 应用程序一般都需要计划重复执行的任务。企 ... -
csdn上的反射和代理的好例子
2007-03-07 11:25 2200/** *这个程序的功能是通过反射技术得到一个类(SrcC ... -
一个java反射例子
2007-03-01 11:04 14457package com.spring.event; impor ... -
贴几个自定义usertype
2007-02-24 08:38 1525import java.io.IOException; ... -
修改Structs,Hibernate部份框架为我所用
2007-02-24 08:30 93package com.ideal.common.contro ... -
java基础试题
2007-02-21 09:06 7954一.选择题(每道题3分,共45分) 1 2 3 4 5 6 7 ... -
java学习资料推存
2007-02-20 16:14 1727JAVA 学习资料(吐血推荐) A.书名:《Thinking ...
相关推荐
如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm 文档一样双击运行了;而另一种是使用 JET 来进行 编译。但是 JET 是要用钱买的,而且据说 JET 也不是能...
使用exe 文件启动jar文件,同时不需要java环境就可以运行java程序的方法 用批处理文件运行程序似乎不够专业,虽然它足以完成运行任务。但习惯就象一种毒药一旦染上就很难摆脱它的影响,Windows统治下的人们早已经...
用于连接sql2008数据库的驱动程序,jar文件
JDBC的 驱动包 ojdbc14.jar 程序文件 ----oracle jdbc driver for jdk1.5
无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core],解决办法:WEB/INF的lib下,除了导入jstl.jar包,还要导入standard.jar包。另外,解压standard.jar包,把.tld文件...
Step1:将程序打包成一个.jar文件,如果项目中包含了外部的jar文件,则可以利用工具fat-jar来打包。 Step2:得到瘦身的jre,这个可以使用工具GreenJVMMaker来制作,下载地址:...
NULL 博文链接:https://jarg.iteye.com/blog/852885
jar文件生成器,用于将java代码生成成*.jar文件。 用在java程序开发环境中,非常有用的工具,原来是收费,现在把它转为免费。
注意:此时生成的jar文件只能在装配好Java虚拟机的PC才能正常使用 更好的方法是通过MyEclipse的net.sf.fjep.fatjar_0.0.31.jar插件进行自动生成。 具体如下: 1. 安装插件net.sf.fjep.fatjar_0.0.31.jar插件,直接将...
5、在这里填写Main class的名字,单击绿色+选择所需的.jar文件,如果没有特殊要求我们就可以再继续了。 6、接下来是选择jre版本,填写好jre的最大最小版本然后再继续。 7、下面设一下你的文件执行的片头,增加其...
Android Volley的jar包,包中含有源码。
如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm 文档一样双击运行了;而另一种是使用 JET 来进行 编译。但是 JET 是要用钱买的,而且据说 JET 也不是能...
JAR文件包及jar命令详解.CHM <br> JAR文件包及jar命令详解 常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm 文档一样...
1 SpringMvc 最新在2014年5月官方网站所更新的jar文件 我自己有根据官网文档 及 网上资料 对jar文件解释了逐个的解释 来帮助初学者 了解springMVC的jar文件意思 2 能更快的、方便的、在学习开发中找出程序所出现的...
jar文件转换成exe文件的方法以及程序的打包的方法,非常的好用!初学Java的人一定要看一下!很有帮助
在本文中,作者探讨了JAR 格式的许多功能和优势,包括打包、可执行的 JAR 文件、安全性和索引。 JAR 文件是什么? JAR 文件格式以流行的 ZIP 文件格式为基础,用于将许多个文件聚集为一个文件。与 ZIP 文件不同的...
免费下载,解压后将tld和lib文件夹放入WEB-INF下面即可,绝对有效立竿见影