解压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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • php工厂模式

    php工厂模式定义:我们只需要提供一个创建对象实例的功能,而无需关心其具体实现,被创建实例的类型可以是接口、抽象类,也可以是具体的类。一、简单工厂模式(平时开发中基本上简单工厂模式就够用了)说明: Api:定义客户所需要的功能接口(后面具体实现的类基本上就根据这个来) Impl:具体实现Api的实现类,一般有多个, Factory:工厂,选择合适的实现类来创建Api接…

    2022年7月25日
    11
  • linux安装yum命令在线安装_linux如何查看防火墙状态

    linux安装yum命令在线安装_linux如何查看防火墙状态第一步,国内的yum仓库 http://mirrors.163.com/centos/7/os/x86_64/Packages/http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/第二步:下载软件,文件版本可能有变化,根据列表里面进行下载yum-plugin-fastestmirror-1.1.31-34.el7.noar

    2022年10月31日
    0
  • 破坏ice的服务器消息,我的世界:ICE服务器炸,矛头指向Mn,但真相另有隐情!…

    破坏ice的服务器消息,我的世界:ICE服务器炸,矛头指向Mn,但真相另有隐情!…在游戏界中,有一场游戏玩家之间的“战争”,那就是《我的世界》和《迷你世界》。这场战争本来已经停息了很久,但是又因为某些事情,让它快速的发酵了起来。这件事情的原由是因为《我的世界》的ICE服务器被炸,具体经过小编下面为大家讲解。3月25号(大约时间),一个名为ICE的《我的世界》服务器被其他玩家恶意毁坏了,里面的建筑变得残破不堪,而服务器的存档也仅仅只有数天前的。要知道,这些建筑是很多玩家用大量的时…

    2022年6月12日
    49
  • 卷积神经网络常用模型_keras 卷积 循环 多分类

    卷积神经网络常用模型_keras 卷积 循环 多分类刚刚接触到深度学习,前2个月的时间里,我用一维的卷积神经网络实现了对于一维数据集的分类和回归。由于在做这次课题之前,我对深度学习基本上没有过接触,所以期间走了很多弯路。在刚刚收到题目的要求时,我选择使用TensorFlow来直接编写函数,结果由于没有什么基础,写了一个周我就放弃了,改用keras来完成我的任务。用keras来搭建神经网络其实很简单。网络的前面部分都是在提取一维信号的特征…

    2022年9月23日
    0
  • 网络电视测试软件,2018三款智能电视屏幕检测软件,当贝市场良心推荐「建议收藏」

    2018三款智能电视屏幕检测软件,当贝市场良心推荐2018年03月01日18:08作者:厂商投稿编辑:鸿雁分享买电视后,很多朋友会发现,虽然电视是从厂家那里发的最新的货,但还是有不同层次的瑕疵,但电视机的保修期有限,该怎么查出所有电视上存在的问题呢?小编这里就整合出了三个软件,可以查出电视坏点、漏光等问题,为大家造福。智能电视用户可以在当贝市场中安装以下软件检测。第一个:电视屏幕大师电视屏幕大师…

    2022年4月15日
    99
  • Solr使用入门指南

    Solr使用入门指南

    2021年12月15日
    37

发表回复

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

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