远程解压需要的jar包:

  1. <dependency>
  2. <groupId>commons-net</groupId>
  3. <artifactId>commons-net</artifactId>
  4. <version>3.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>ch.ethz.ganymed</groupId>
  8. <artifactId>ganymed-ssh2</artifactId>
  9. <version>build210</version>
  10. </dependency>

Java实现文件压缩跟解压:

  1. package com.sunsheen.jfids.studio.monitor.utils;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.InputStreamReader;
  10. import java.io.OutputStream;
  11. import java.io.PrintWriter;
  12. import java.util.Enumeration;
  13. import java.util.zip.ZipEntry;
  14. import java.util.zip.ZipFile;
  15. import java.util.zip.ZipOutputStream;
  16.  
  17. import org.eclipse.core.runtime.Assert;
  18.  
  19. import ch.ethz.ssh2.ChannelCondition;
  20. import ch.ethz.ssh2.Connection;
  21. import ch.ethz.ssh2.Session;
  22. import ch.ethz.ssh2.StreamGobbler;
  23.  
  24. import com.sunsheen.jfids.studio.monitor.HKMoniter;
  25. import com.sunsheen.jfids.studio.monitor.HKMoniterFactory;
  26. import com.sunsheen.jfids.studio.monitor.common.LogInfo;
  27. /**
  28. * 多文件的打包压缩跟解压
  29. * @author WangSong
  30. *
  31. */
  32. public class ZipFiles {
  33. private static HKMoniter moniter = HKMoniterFactory.getLogger(ZipFiles.class.getName());
  34.  
  35. /**
  36. * 功能:压缩多个文件成一个zip文件(本地)
  37. * @param srcfile:源文件列表
  38. * @param zipfile:压缩后的文件
  39. */
  40. public static void zipFiles(File[] srcfile,File zipfile){
  41. if(srcfile.length == 0 || null==srcfile)
  42. return;
  43.  
  44. byte[] buf=new byte[1024];
  45. try {
  46. //ZipOutputStream :完成文件或文件夹的压缩
  47. ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));
  48. for(int i=0;i<srcfile.length;i++){
  49. FileInputStream in = new FileInputStream(srcfile[i]);//读取文件
  50. out.putNextEntry(new ZipEntry(srcfile[i].getName()));//设置内文件名
  51. //写入数据
  52. int length;
  53. while((length = in.read(buf)) > 0){
  54. out.write(buf,0,length);
  55. }
  56. out.closeEntry();
  57. in.close();
  58. }
  59. out.close();
  60. moniter.info("文件【"+zipfile.getName()+"】,压缩完成!");
  61. System.out.println("压缩完成.");
  62. } catch (Exception e) {
  63. e.printStackTrace();
  64. }
  65. }
  66.  
  67. /**
  68. * 功能:解压缩(本地)
  69. * @param zipfile:需要解压缩的文件
  70. * @param descDir:解压后的目标目录
  71. */
  72. public static void unZipFiles(File zipfile,String descDir){
  73.  
  74. try {
  75. ZipFile zf = new ZipFile(zipfile);//格式化
  76. //循环遍历出压缩的每个文件
  77. for(Enumeration entries = zf.entries();entries.hasMoreElements();){
  78. ZipEntry entry = (ZipEntry) entries.nextElement();
  79. String zipEntryName = entry.getName();//当前压缩文件中文件名
  80. InputStream in = zf.getInputStream(entry);
  81.  
  82. File mkFile = new File(descDir + zipEntryName);
  83. mkFile.createNewFile();
  84.  
  85. OutputStream out=new FileOutputStream(descDir + zipEntryName);
  86. byte[] buf1 = new byte[1024];
  87. int len;
  88. while((len=in.read(buf1)) > 0){
  89. out.write(buf1,0,len);
  90. }
  91. in.close();
  92. out.close();
  93. moniter.info("文件【"+zipfile.getName()+"】,解压缩完成!");
  94. System.out.println("解压缩完成.");
  95. }
  96. } catch (Exception e) {
  97. e.printStackTrace();
  98. }
  99. }
  100.  
  101. /**
  102. * 壓縮指定文件夾下所有文件
  103. * @param targetZipFile 压缩后的文件 eg:d://logs//log.zip
  104. * @param logParentFolder 日志文件所在的文件夹 eg:e://logs
  105. * @return
  106. */
  107. public static File zipLogs(String targetZipFile,String logParentFolder){
  108. //定义日志压缩文件
  109. File[] logsFileArr = new File(logParentFolder).listFiles();//所有的日志文件
  110. //創建一個空的目標zip文件
  111. File resultZip = new File(targetZipFile);
  112. //壓縮
  113. zipFiles(logsFileArr, resultZip);
  114. return resultZip;
  115. }
  116.  
  117. /**
  118. * 解压文件(远程)
  119. * @param romoteAddr 服务器地址
  120. * @param username 服务器用户名
  121. * @param password 服务器密码
  122. * @param targetFolder 服务器上需要解压文件的目录 eg:/usr/local/hk-logs
  123. * @param zipFileName 需要解压文件的文件名 eg:logs.zip
  124. */
  125. public static void remoteUnZip(String romoteAddr,String username,String password,
  126. String targetFolder,String zipFileName){
  127.  
  128. try {
  129. Connection connection = new Connection(romoteAddr);// 创建一个连接实例
  130. connection.connect();// Now connect
  131. boolean isAuthenticated = connection.authenticateWithPassword(username, password);//認證
  132. Assert.isTrue(isAuthenticated, "用戶名或者密碼錯誤!");
  133. Session sess = connection.openSession();// 創建一個會話
  134. sess.requestPTY("bash");
  135. sess.startShell();
  136. InputStream stdout = new StreamGobbler(sess.getStdout());
  137. InputStream stderr = new StreamGobbler(sess.getStderr());
  138. BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(stdout));
  139. BufferedReader stderrReader = new BufferedReader(new InputStreamReader(stderr));
  140. //向服务器上输入命令
  141. PrintWriter out = new PrintWriter(sess.getStdin());
  142. out.println("cd " + targetFolder);//進入日志文件存放的目录
  143. out.println("ll");
  144. out.println("unzip -o -d "+targetFolder+" "+zipFileName);//解压文件到指定位置
  145. out.println("ll");
  146. out.println("exit");
  147. out.close();
  148. sess.waitForCondition(ChannelCondition.CLOSED|ChannelCondition.EOF | ChannelCondition.EXIT_STATUS,30000);
  149.  
  150. //本机查看远程操作的指令及状态
  151. showRemoteShell(stdoutReader,stderrReader,sess);
  152.  
  153. //关闭连接
  154. sess.close();
  155. connection.close();
  156. } catch (IOException e) {
  157. moniter.error("远程解压文件【"+ zipFileName +"】,错误:" + e);
  158. e.printStackTrace(System.err);
  159. System.exit(2);
  160. }
  161. }
  162.  
  163. //打印远程指令及状态
  164. private static void showRemoteShell(BufferedReader stdoutReader,BufferedReader stderrReader,
  165. Session sess) throws IOException{
  166. System.out.println("输入在服务器的指令:");
  167. while (true) {
  168. String line = stdoutReader.readLine();
  169. if (line == null)
  170. break;
  171. System.out.println(line);
  172. }
  173. System.out.println("输入指令后对应的显示信息:");
  174. while (true) {
  175. String line = stderrReader.readLine();
  176. if (line == null)
  177. break;
  178. System.out.println(line);
  179. }
  180. System.out.println("ExitCode: " + sess.getExitStatus());
  181. }
  182.  
  183. }

文件压缩跟解压(本地&Linux服务器)的更多相关文章

  1. Linux之文件压缩与解压

    文件压缩与解压 1.tar命令 tar命令可以为Linux的文件和目录创建档案. 利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar最初被用来 ...

  2. CSharp tar类型文件压缩与解压

    最近闲暇时间开始写点通用基础类在写到tar类型文件压缩与解压时遇到点问题 压缩用的类库我是下载的 SharpZipLib_0860版本 先上代码 加压核心 /// <summary> // ...

  3. I/O操作之文件压缩与解压

    与文件压缩与解压相关的类在java.util.zip包下 实例 //文件压缩 import java.io.File; import java.io.FileInputStream; import j ...

  4. 文件压缩、解压工具类。文件压缩格式为zip

    package com.JUtils.file; import java.io.BufferedOutputStream; import java.io.File; import java.io.Fi ...

  5. linux下文件压缩与解压操作

    对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕.别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rap.可 ...

  6. 16 Linux系统的文件压缩、解压与归档

    这一节的内容,我们详细介绍下Linux的文件压缩.解压缩与文件归档的内容,也就是tar.gzip.bzip2.xz等命令的内容: 压缩(compress)与解压缩(uncompress) Linux系 ...

  7. Linux 下文件压缩与解压命令详解

    tar 命令 -c 建立压缩档案 -x 解压 -t 查看内容 -r 向压缩归档文件末尾追加文件 -u 更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中 ...

  8. Linux文件压缩/打包/解压

    在Linux日常维护中,经常需要备份同步一些比较重要的文件,而在传输过程中如果文件比较大往往会非常慢,而且还会非常占用空间,这时候就需要我们使用压缩工具对大文件进行压缩打包,下面我们来介绍一下常用的压 ...

  9. Linux中文件压缩与解压

    压缩与解压 compress 文件名 1 -v //详细信息 2 3 -d //等于 uncompress 默认只识别 .Z 如果使用别的后缀,会导致不识别,解压缩失败.也可以使用 -d -c 压缩包 ...

随机推荐

  1. Spring IOC 剖析

    模拟实现 Spring Ioc 控制反转功能 使用 => 原理 => 源码 => 模拟实现 使用:了解 原理:熟悉 源码 And 模拟实现: 精通 对照 Spring 功能点 Spr ...

  2. Python中 *args 和 **kwargs 的含义?

    答:在python中,*args和**kwargs通常使用在函数定义里.*args 和 **kwargs 都允许你给函数传不定数量的参数,即使在定义函数的时候不知道调用者会传递几个参数.ps: *ar ...

  3. C#LeetCode刷题之#707-设计链表(Design Linked List)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4118 访问. 设计链表的实现.您可以选择使用单链表或双链表.单链 ...

  4. 设计模式实战系列之@Builder和建造者模式

    前言 备受争议的Lombok,有的人喜欢它让代码更整洁,有的人不喜欢它,巴拉巴拉一堆原因.在我看来Lombok唯一的缺点可能就是需要安装插件了,但是对于业务开发的项目来说,它的优点远远超过缺点. 我们 ...

  5. Ubuntu 18.04 安装配置 go 语言

    Ubuntu 18.04 安装配置 go 语言 1.下载 下载 jdk 到 Downloands 文件夹下 cd 进入 /usr/local, 创建 go 文件夹, 然后 cd 进这个文件夹 cd / ...

  6. 笔记:HTTP协议基础

    一.HTTP协议特点: 简单快速,请求方式有get.post.head 等8种 无连接无状态 支持模式有 B/S(浏览器) C/S(通过websocket去通信) URL,统一资源定位符,在网络中用来 ...

  7. (趣味哈哈镜)JMF中摄像头相关的问题

    JMF已经非常古老了.最近由于做实验的需要,不得不使用JMF处理视频.开发使用win10系统和eclipse.使用中的问题如下: 1.首先想要使用JMF需要必须安装32位JDK,同时编译软件也需要是3 ...

  8. Linux内核之 内存管理

    前面几篇介绍了进程的一些知识,从这篇开始介绍内存.文件.IO等知识,发现更不好写哈哈.但还是有必要记录下自己的所学所思.供后续翻阅,同时写作也是一个巩固的过程. 这些知识以前有文档涉及过,但是角度不同 ...

  9. zookeeper基本配置以及一些坑

    配置 1. 解压安装包:tar zxvf zookeeper-3.4.14.tar.gz 2. 修改zookeeper配置: #Master cd zookeeper-3.4.14 #创建日志文件夹及 ...

  10. edge 修改链接打开方式

    我目前的edge版本是 Version 84.0.522.63 (Official build) (64-bit) 每次点击链接, 都是默认在原页面打开新标签, 不符合过往习惯. 修改方式 打开控制面 ...