解压war包和重新压缩war包[通俗易懂]

解压war包和重新压缩war包[通俗易懂]publicclassWarUtils{ /** *解压war包 *@paramunWarPathwar解压的路径 *@paramwarFile解压的war包文件 */ publicstaticvoidunWar(StringunWarPath,FilewarFile){ try{ //读取文件流 Buffered

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

public class WarUtils {
	/**
	 * 解压war包
	 * @param unWarPath war解压的路径
	 * @param warFile 解压的war包文件
	 */
	public static void unWar(String unWarPath,File warFile) {
		try {
	        //读取文件流	
			BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(warFile));
			//创建解压流的文件类型
			ArchiveInputStream in = new ArchiveStreamFactory().createArchiveInputStream(ArchiveStreamFactory.JAR, bufferedInputStream);
			JarArchiveEntry entry = null;
			while ((entry = (JarArchiveEntry) in.getNextEntry()) != null) {
				//判断目录是否存在
				if (entry.isDirectory()) {
					//创建解压文件目录
					new File(unWarPath, entry.getName()).mkdir();
				} else {
					//输出文件流
					OutputStream out = FileUtils.openOutputStream(new File(unWarPath, entry.getName()));
					IOUtils.copy(in, out);
					//关闭输出文件流
					out.close();
				}
			}
			in.close();
		} catch (FileNotFoundException e) {
			System.err.println("未找到war文件");
		} catch (ArchiveException e) {
			System.err.println("不支持的压缩格式");
		} catch (IOException e) {
			System.err.println("文件写入发生错误");
		}
	}
	
	/**
	 * 判断war包是否已经存在,若存在则删除
	 * @param filePath
	 */
	public static void delWarFile(String filePath){
		try {
			File file = new File(filePath);
			//判断文件是否存在
			if(file.exists()){
				file.delete();	
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	
	 /**
	  * 创建解压的war包目录,并返回目录路径
	  * @param warPath war所在路径
	  * @param unWarPath war包解压路径
	  * @return
	  */
	 public static String mkDirByFileName(String warPath, String unWarPath){
		 try {
			//创建文件
			 File warFile = new File(warPath);
			 //获取文件全部名称,包括后缀,如test.war
			 String fileFullName = warFile.getName();
			 if(fileFullName!=null){
				 //获取文件名称,如test
				 String fileName = fileFullName.substring(0, fileFullName.lastIndexOf("."));
				 //创建解压目录:解压路径+文件名称目录
				 String unWarFilePath = unWarPath+"\\"+fileName;
				 File file =new File(unWarFilePath);
				 //如果文件夹不存在则创建    
				 if(!file.exists()&&!file.isDirectory()){
					 file .mkdir();
				 }
				 //判断文件后后缀是否war
				 String fileSuffix = fileFullName.substring(fileFullName.lastIndexOf(".")+1, fileFullName.length());
				 if(fileSuffix.toLowerCase().equals("war")){
					//解压war包
					 unWar(unWarFilePath,warFile);
					 return unWarFilePath;
				 }
			 }
			 return null;
		 } catch (Exception e) {
			 System.err.println(e.getMessage());
			 return null;
		 }
	 }
	 
	 /** 
	  * @desc 将源文件/文件夹生成指定格式的压缩文件,格式war 
	  * @param resourePath 源文件/文件夹 
	  * @param targetPath  目的压缩文件保存路径 
	  * @return void 
	  * @throws Exception  
	 */  
	public static void compressedFile(String resourcesPath,String targetPath) throws Exception{
		File resourcesFile = new File(resourcesPath);     //源文件  
		File targetFile = new File(targetPath);           //目的  
		//如果目的路径不存在,则新建  
		if(!targetFile.exists()){       
			targetFile.mkdirs();    
		}           
		String targetName = resourcesFile.getName()+".war";   //目的压缩文件名  
		//压缩文件路径
		String targetCompPath = targetPath+"\\"+targetName;
		FileOutputStream outputStream = new FileOutputStream(targetCompPath);  
		ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(outputStream));  
		createCompressedFile(out, resourcesFile, "");  
		out.close();    
	}       
	/** 
	 * @desc 生成压缩文件。 
	 * 如果是文件夹,则使用递归,进行文件遍历、压缩 
	 * 如果是文件,直接压缩 
	 * @param out  输出流 
	 * @param file  目标文件 
	 * @return void 
	 * @throws Exception  	
	 */  
	public static void createCompressedFile(ZipOutputStream out,File file,String dir) throws Exception{  
		//如果当前的是文件夹,则进行进一步处理  
		if(file.isDirectory()){  
			//得到文件列表信息  
			File[] files = file.listFiles();  
			//将文件夹添加到下一级打包目录  
			out.putNextEntry(new ZipEntry(dir+"/"));  
			dir = dir.length() == 0 ? "" : dir +"/";  
			//循环将文件夹中的文件打包  
			for(int i = 0 ; i < files.length ; i++){  
				createCompressedFile(out, files[i], dir + files[i].getName());         //递归处理  
			}  
		} else{   //当前的是文件,打包处理  
			//文件输入流  
			FileInputStream fis = new FileInputStream(file);  
			out.putNextEntry(new ZipEntry(dir));  
			//进行写操作  
			int j =  0;  
			byte[] buffer = new byte[1024];  
			while((j = fis.read(buffer)) > 0){  
				out.write(buffer,0,j);  
			}  
			//关闭输入流  
			fis.close();  
		}  
	}
	
	//删除当前目录以及目录下的文件
	public static boolean deleteDir(File delFile) {
		if (delFile.isDirectory()) {
			String[] children = delFile.list();
			//递归删除目录中的子目录以及文件
			for (int i=0; i<children.length; i++) {
				boolean success = deleteDir(new File(delFile, children[i]));
				if (!success) {
					return false;
				}
			}
		}
		// 目录此时为空,可以删除
        return delFile.delete();
	}
	
	//文件重新命名
	public static void toFileRename(String filePath,String unWarPath){
		SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
		String now = format.format(new Date());
		File file = new File(filePath);
		//判断文件是否存在
		if(file.exists()){
			//获取文件全部名称,包括后缀,如test.war
			String fileFullName = file.getName();
			//获取文件名称,如test
			String fileName = fileFullName.substring(0, fileFullName.lastIndexOf("."));
			
			String fileSuffix =  fileFullName.substring(fileFullName.lastIndexOf("."),fileFullName.length());
			String renameFilePath = unWarPath +"\\"+fileName+"_bak"+now+fileSuffix;
			file.renameTo(new File(renameFilePath));
		}
	}
}

涉及到的jar包有ant-1.8.2.jar,ant-launcher-1.8.2.jar,commons-lang-2.6.jar,commons-compress-1.10.jar,commons-io-2.4.jar

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188321.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 地理加权回归学习记录「建议收藏」

    地理加权回归学习记录「建议收藏」地理加权回归GWR白话空间统计二十四:地理加权回归(三)地理加权回归可以用来量化空间异质性。研究区域——利用每个要素的不同空间位置计算距离衰减函数——把每个要素的空间位置(一般是坐标信息(x,y))和要素的值带入到这个函数里面之后,就可以得到一个权重值,这个值就可以带入到回归方程里面去这个衰减函数的理论基础,正是Tobler提出所谓的“地理学第一定律(Tobler’sFirstLaw或者Tobler’sFirstLawofGeography):位置越接近的数据,比远处的数据对结果的影响更

    2022年9月28日
    5
  • Docker 镜像小结 – 每天5分钟玩转 Docker 容器技术(21)

    Docker 镜像小结 – 每天5分钟玩转 Docker 容器技术(21)

    2022年3月3日
    51
  • Windows:安装cygwin教程[通俗易懂]

    目录目录前言常见错误前言本篇文章参考这篇:cygwin安装但自从博主写后,这个东西发生了一些变化,因此,根据最新版的重新写了一遍。我们可以到Cygwin的官方网站下载Cygwin的安装程序或者直接使用来下载安来下载安装程序.下载完成后,运行setup.exe程序,首先是同意安装,第三方的软件在windows上不受信任,出现安装画面。直接点“下一步”,…

    2022年4月6日
    337
  • ES6转ES5_nodejs支持es6吗

    ES6转ES5_nodejs支持es6吗Babel介绍Babel是一个ES6转码器,能将ES6代码转为ES5代码,这样原本不支持ES6的老版本浏览器执行ES6代码//转码前:使用了ES6箭头函数items.map(item=>item+1);//转码后:转为了普通函数items.map(function(item){returnitem+1;});Babel安装安装Babel,一个命令就够了:$npminstall–save-dev@babel/cor…

    2022年9月24日
    3
  • shell捕获sqlplus异常_QSqlQuery

    shell捕获sqlplus异常_QSqlQueryHSQLDB是一个使用Java语言编写的关系型数据库,有一个JDBCdriver,支持ANSI-92SQL的一个子集。提供对内存表和硬盘表的小型,快速的引擎。这个产品是HypersonicSQL的后续产品,2001年启动。HSQLDBisarelationaldatabaseenginewritteninJava,withaJDBCdriver,support…

    2025年11月23日
    4
  • STM32F107RCT6_单片机开发板工作原理

    STM32F107RCT6_单片机开发板工作原理基于STM32F103C8T6开发板+GY521加速度计模块制作的有刷四轴飞控,成本不到20元,效果很不错

    2026年2月1日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号