解压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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 一个简单的Python暴力激活成功教程网站登录密码脚本「建议收藏」

    一个简单的Python暴力激活成功教程网站登录密码脚本「建议收藏」使用Python的Request库的get()方法来发送http请求,利用Python脚本循环遍历字典来进行暴力激活成功教程

  • csdn的积分(积分计算规则)

    博客积分是衡量博客水平的重要标准,博客的排名也将按照积分排列。这是积分规则: 1、你每发布一篇原创或者翻译文章:可获得10分 2、你每发布一篇转载文章:可获得2分 3、博主你的文章每被评论一次:可获得1分 4、你每发表一次评论:可获得1分(自己给自己评论、博主回复别人对自己博文的评论不获得积分) 5、你每篇博文阅读次数每超过100次:可获得1分,阅读加分最高加到100分,即每篇

  • Android ListView等列表设置空布局

    Android ListView等列表设置空布局在Android平台上,listView是特别常用的组件之一,我们在向用户展示列表数据时,通常要考虑:列表有数据和无数据空的状态,因为网络环境各异,难免刷新失败什么的;在此之前我是使用ViewStub来实现,通过判断listview列表数据是否为空来设置ViewStub的隐藏和显示,或者设置lIstview的显示或隐藏;但是,对ViewStub不是特别的了解,把控不好,只是控

  • 协程

    协程介绍协程:是单线程下的并发,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的。、需要强调的是:对比操作系统控制

  • 利用java实现发送邮件

    利用java实现发送邮件电子邮件的应用非常广泛,常见的如在某网站注册了一个账户,自动发送一封激活邮件,通过邮件找回密码,自动批量发送活动信息等。很显然这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过Java代码来创建电子邮件,并连接邮件服务器发送邮件。电子邮件协议电子邮件在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括SMTP,POP3,IMA…

  • 如何使用一套键盘鼠标,同时控制多台电脑_控制鼠标

    如何使用一套键盘鼠标,同时控制多台电脑_控制鼠标1.蓝牙键盘我使用的蓝牙键盘是GANSSGS87键的蓝牙双模键盘茶轴,既支持有线,也支持无线。最大的优点是便宜,到手300多,这个价格能买到有牌子、质量还不错的机械键盘算是非常难得的。当然也有一点小瑕疵,就是不能充电,得用电池,不过大半年才换一次电池,这个缺陷也可以忽略了。接下来记录一下该键盘的蓝牙连接的设置步骤,其他键盘应该也是同理,希望能给大家一些参与:先选择你要设置的键:比如你想把Fn+Q,作为切换到Mac的快捷键,那么你先按Fn+Q,表示已经进入这个快捷键的作用域下。

    2022年10月15日

发表回复

您的电子邮箱地址不会被公开。

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