删除jar包中的指定文件

如何删除jar包中的指定文件呢?

当然使用解压缩软件(rar,zip,7z)肯定没问题.但是我想自动化,图形界面的工具就无能为力了.

核心方法:

Java代码  

  1. /*** 
  2.      * 删除jar包中的内容 
  3.      * @param jarPath 
  4.      * @param fileName : "META-INF/BCKEY.DSA" 
  5.      * @throws IOException 
  6.      * @throws ArchiveException 
  7.      */  
  8.     public static void deleteFileInJar(String jarPath,String fileName) throws IOException, ArchiveException{  
  9.         List<String>fileNames=new ArrayList<String>();  
  10.         if(!ValueWidget.isNullOrEmpty(fileName)){  
  11.         fileNames.add(fileName);}  
  12.         deleteFileInJar(jarPath, fileNames);  
  13.     }  
  14.     /** 
  15.      * 删除jar包中的内容 
  16.      * @param jarPath 
  17.      * @param fileNames : ["META-INF/BCKEY.DSA"],注意斜杠 
  18.      * @throws IOException 
  19.      * @throws ArchiveException 
  20.      */  
  21.     public static void deleteFileInJar(String jarPath,List<String>fileNames) throws IOException, ArchiveException{  
  22.         List<ZipFileBean> zipFiles = CompressZipUtil  
  23.                 .deCompressRecursionFileList(jarPath, "", true);  
  24.         List<ZipApkFile> zipApkFiles = extendZipFileBean(zipFiles,fileNames);  
  25.         CompressZipUtil.setPrint(false);  
  26.         File newFile=new File(jarPath + ".bak");  
  27.         while(newFile.exists()){  
  28.             //若bak文件存在,则循环修改名称,只到文件不存在  
  29.             System.out.println("file exist:"+newFile.getAbsolutePath());  
  30.             newFile=new File(jarPath + RandomUtils.getTimeRandom2());  
  31.         }  
  32.         CompressZipUtil.persistenceZip(newFile, zipApkFiles);  
  33.         File jarFile=new File(jarPath);  
  34.           
  35.         System.out.println("delete old jar:"+jarFile.getAbsolutePath());  
  36.         boolean isSuccess=jarFile.delete();  
  37.         if(!isSuccess){  
  38.             System.out.println("删除失败:"+jarFile.getAbsolutePath());  
  39.         }else{  
  40.             System.out.println("modify name");  
  41.             newFile.renameTo(jarFile);  
  42.         }  
  43.     }  

 使用说明:

比如我想删除jar(zip)包中的config\manual.properties

zip包结构:

 

main方法如下:

 

Java代码  

  1. public static void main(String[] args) throws IOException, ArchiveException {  
  2.         String jarPath="D:\\bin\\config\\config.zip";  
  3.   
  4.         deleteFileInJar(jarPath, "config/manual.properties"/*"META-INF/BCKEY.DSA"*/);  
  5.         System.out.println("jarPath:"+jarPath);  
  6.   
  7.           
  8.     }  
时间: 2024-12-31 17:41:06

删除jar包中的指定文件的相关文章

java 读取jar包中的资源文件实例程序

1) ClassLoader是abstract的,不可能实例化对象,更加不可能通过ClassLoader调用上面两个方法.所以我们真正写代码的时候,是通过Class类中的getResource()和getResourceAsStream()方法,这两个方法会委托ClassLoader中的getResource()和getResourceAsStream()方法 .好了,现在我们重新写一段Resource代码,来看看上面那段费解的话是什么意思了: Java代码  代码如下 复制代码 package

dom4j从jar包中读取xml文件的方法_java

进行封装的时候,我们常常需要用xml来定义一些规范,在单独运行读取的时候当然不会有问题,但这些xml是往往是放在jar包里的,这样一来,这些东西就找不出来了.文中用到的xml定义如下: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><ACCESOS> <item>  <SOCIO name="adsf">   <NUMERO>00045

执行可运行jar包时读取jar包中的文件

可运行的jar包,都会在META-INF\MANIFEST.MF中设置Main-Class. 那么如何在jar包中读取其中的某个文件呢? 注意:是在可运行的jar包中读取该jar包中的文件,也就是说读取jar包中文件的这段代码在该jar包中  TestUrl类内容如下: Java代码   import java.io.IOException;   import java.io.InputStream;   import java.net.MalformedURLException;   impo

如何访问jar包中的jsp页面

问题描述 jsp页面已经打包成jar了,包括js,css样式,全都打包了.请问,如何访问.在线急求啊..感谢.. 解决方案 解决方案二:这个真没遇到过.你就当成2个项目.写个webservice试试吧.看看可以不...关注中解决方案三:把jar包放在新工程的lib下,然后根据目录访问就行了.jar包所在目录为新工程的根目录.解决方案四:引用2楼dryzeng的回复: 把jar包放在新工程的lib下,然后根据目录访问就行了.jar包所在目录为新工程的根目录. 不行啊,我试过了.不知道你试过没..解

浅谈java 执行jar包中的main方法_java

浅谈java 执行jar包中的main方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 main 方法,那么如何运行指定的 main 方法呢? 用下面的命令试试看: java -classpath ****.jar ****.****.className [args] "****.****"表示"包名": "className"表示&

解压zip压缩包中的指定文件(害死人的错误)

使用Java 解压zip压缩包中的指定文件时遇到了问题. 且听我细细道来: 主要方法如下: Java代码   public static byte[] getContent2(final ZipFile zipFile, final ZipEntry zipEntry)               throws IOException {           InputStream inputStream = zipFile.getInputStream(zipEntry);          

Android studio删除jar包出问题

问题描述 Android studio删除jar包出问题 (新手使用Android studio,求大神指导)导入一个xUtils-2.6.2.jar 包用不了 一直报错:Error: Unable to access jarfile H:workspaceFitsapplibsxUtils-2.6.2.jar然后我就把这个jar包删了重新下载导入一个,还是包这个错,百度了方法都还是报错,求指点!! 解决方案 android studio 删除.导入jar包Android studio 如何打j

解压jar-关于怎样修改jar包里面的.class 文件并重新打包的问题?

问题描述 关于怎样修改jar包里面的.class 文件并重新打包的问题? 我有个jar包是写的surfaceView的信息,但我想修改这个类,就用解压软件解压后,用jd-jui软件打开,将这个类复制到text文件中修改后,想编译一下再放入jar中,但是编译不了我用javac view.java 提示找不到这个类引入的其他类,请问各位大侠该怎样做,您的帮助,永远感激! 解决方案 这样修改不安全,反编译出来的java文件存在一定风险的解析错误,最保险的方法是直接修改字节码

教你如何获取ipa包中的开发文件

教你如何获取ipa包中的开发文件 1. 从iTunes获取到ipa包 2. 修改ipa包然后获取里面的开发文件