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

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

如何删除jar包中的指定文件呢? 当然使用解压缩软件(rar,zip,7z)肯定没问题.但是我想自动化,图形界 […]

2014-05-08

如何删除jar包中的指定文件呢?
当然使用解压缩软件(rar,zip,7z)肯定没问题.但是我想自动化,图形界面的工具就无能为力了.
核心方法:
/***
  * 删除jar包中的内容
  * @param jarPath
  * @param fileName : "META-INF/BCKEY.DSA"
  * @throws IOException
  * @throws ArchiveException
  */
 public static void deleteFileInJar(String jarPath,String fileName) throws IOException, ArchiveException{
  List<String>fileNames=new ArrayList<String>();
  if(!ValueWidget.isNullOrEmpty(fileName)){
  fileNames.add(fileName);}
  deleteFileInJar(jarPath, fileNames);
 }
 /**
  * 删除jar包中的内容
  * @param jarPath
  * @param fileNames : ["META-INF/BCKEY.DSA"],注意斜杠
  * @throws IOException
  * @throws ArchiveException
  */
 public static void deleteFileInJar(String jarPath,List<String>fileNames) throws IOException, ArchiveException{
  List<ZipFileBean> zipFiles = CompressZipUtil
    .deCompressRecursionFileList(jarPath, "", true);
  List<ZipApkFile> zipApkFiles = extendZipFileBean(zipFiles,fileNames);
  CompressZipUtil.setPrint(false);
  File newFile=new File(jarPath + ".bak");
  while(newFile.exists()){
   //若bak文件存在,则循环修改名称,只到文件不存在
   System.out.println("file exist:"+newFile.getAbsolutePath());
   newFile=new File(jarPath + RandomUtils.getTimeRandom2());
  }
  CompressZipUtil.persistenceZip(newFile, zipApkFiles);
  File jarFile=new File(jarPath);
  
  System.out.println("delete old jar:"+jarFile.getAbsolutePath());
  boolean isSuccess=jarFile.delete();
  if(!isSuccess){
   System.out.println("删除失败:"+jarFile.getAbsolutePath());
  }else{
   System.out.println("modify name");
   newFile.renameTo(jarFile);
  }
 }
 使用说明:
比如我想删除jar(zip)包中的config\manual.properties
zip包结构:
zip包结构
上层目录

main方法如下:
public static void main(String[] args) throws IOException, ArchiveException {
  String jarPath="D:\\bin\\config\\config.zip";

  deleteFileInJar(jarPath, "config/manual.properties"/*"META-INF/BCKEY.DSA"*/);
  System.out.println("jarPath:"+jarPath); 
 }

转载自网络