文件压缩跟解压(本地&Linux服务器)
远程解压需要的jar包:
- <dependency>
- <groupId>commons-net</groupId>
- <artifactId>commons-net</artifactId>
- <version>3.1</version>
- </dependency>
- <dependency>
- <groupId>ch.ethz.ganymed</groupId>
- <artifactId>ganymed-ssh2</artifactId>
- <version>build210</version>
- </dependency>
Java实现文件压缩跟解压:
- package com.sunsheen.jfids.studio.monitor.utils;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.io.PrintWriter;
- import java.util.Enumeration;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipFile;
- import java.util.zip.ZipOutputStream;
- import org.eclipse.core.runtime.Assert;
- import ch.ethz.ssh2.ChannelCondition;
- import ch.ethz.ssh2.Connection;
- import ch.ethz.ssh2.Session;
- import ch.ethz.ssh2.StreamGobbler;
- import com.sunsheen.jfids.studio.monitor.HKMoniter;
- import com.sunsheen.jfids.studio.monitor.HKMoniterFactory;
- import com.sunsheen.jfids.studio.monitor.common.LogInfo;
- /**
- * 多文件的打包压缩跟解压
- * @author WangSong
- *
- */
- public class ZipFiles {
- private static HKMoniter moniter = HKMoniterFactory.getLogger(ZipFiles.class.getName());
- /**
- * 功能:压缩多个文件成一个zip文件(本地)
- * @param srcfile:源文件列表
- * @param zipfile:压缩后的文件
- */
- public static void zipFiles(File[] srcfile,File zipfile){
- if(srcfile.length == 0 || null==srcfile)
- return;
- byte[] buf=new byte[1024];
- try {
- //ZipOutputStream :完成文件或文件夹的压缩
- ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));
- for(int i=0;i<srcfile.length;i++){
- FileInputStream in = new FileInputStream(srcfile[i]);//读取文件
- out.putNextEntry(new ZipEntry(srcfile[i].getName()));//设置内文件名
- //写入数据
- int length;
- while((length = in.read(buf)) > 0){
- out.write(buf,0,length);
- }
- out.closeEntry();
- in.close();
- }
- out.close();
- moniter.info("文件【"+zipfile.getName()+"】,压缩完成!");
- System.out.println("压缩完成.");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 功能:解压缩(本地)
- * @param zipfile:需要解压缩的文件
- * @param descDir:解压后的目标目录
- */
- public static void unZipFiles(File zipfile,String descDir){
- try {
- ZipFile zf = new ZipFile(zipfile);//格式化
- //循环遍历出压缩的每个文件
- for(Enumeration entries = zf.entries();entries.hasMoreElements();){
- ZipEntry entry = (ZipEntry) entries.nextElement();
- String zipEntryName = entry.getName();//当前压缩文件中文件名
- InputStream in = zf.getInputStream(entry);
- File mkFile = new File(descDir + zipEntryName);
- mkFile.createNewFile();
- OutputStream out=new FileOutputStream(descDir + zipEntryName);
- byte[] buf1 = new byte[1024];
- int len;
- while((len=in.read(buf1)) > 0){
- out.write(buf1,0,len);
- }
- in.close();
- out.close();
- moniter.info("文件【"+zipfile.getName()+"】,解压缩完成!");
- System.out.println("解压缩完成.");
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 壓縮指定文件夾下所有文件
- * @param targetZipFile 压缩后的文件 eg:d://logs//log.zip
- * @param logParentFolder 日志文件所在的文件夹 eg:e://logs
- * @return
- */
- public static File zipLogs(String targetZipFile,String logParentFolder){
- //定义日志压缩文件
- File[] logsFileArr = new File(logParentFolder).listFiles();//所有的日志文件
- //創建一個空的目標zip文件
- File resultZip = new File(targetZipFile);
- //壓縮
- zipFiles(logsFileArr, resultZip);
- return resultZip;
- }
- /**
- * 解压文件(远程)
- * @param romoteAddr 服务器地址
- * @param username 服务器用户名
- * @param password 服务器密码
- * @param targetFolder 服务器上需要解压文件的目录 eg:/usr/local/hk-logs
- * @param zipFileName 需要解压文件的文件名 eg:logs.zip
- */
- public static void remoteUnZip(String romoteAddr,String username,String password,
- String targetFolder,String zipFileName){
- try {
- Connection connection = new Connection(romoteAddr);// 创建一个连接实例
- connection.connect();// Now connect
- boolean isAuthenticated = connection.authenticateWithPassword(username, password);//認證
- Assert.isTrue(isAuthenticated, "用戶名或者密碼錯誤!");
- Session sess = connection.openSession();// 創建一個會話
- sess.requestPTY("bash");
- sess.startShell();
- InputStream stdout = new StreamGobbler(sess.getStdout());
- InputStream stderr = new StreamGobbler(sess.getStderr());
- BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(stdout));
- BufferedReader stderrReader = new BufferedReader(new InputStreamReader(stderr));
- //向服务器上输入命令
- PrintWriter out = new PrintWriter(sess.getStdin());
- out.println("cd " + targetFolder);//進入日志文件存放的目录
- out.println("ll");
- out.println("unzip -o -d "+targetFolder+" "+zipFileName);//解压文件到指定位置
- out.println("ll");
- out.println("exit");
- out.close();
- sess.waitForCondition(ChannelCondition.CLOSED|ChannelCondition.EOF | ChannelCondition.EXIT_STATUS,30000);
- //本机查看远程操作的指令及状态
- showRemoteShell(stdoutReader,stderrReader,sess);
- //关闭连接
- sess.close();
- connection.close();
- } catch (IOException e) {
- moniter.error("远程解压文件【"+ zipFileName +"】,错误:" + e);
- e.printStackTrace(System.err);
- System.exit(2);
- }
- }
- //打印远程指令及状态
- private static void showRemoteShell(BufferedReader stdoutReader,BufferedReader stderrReader,
- Session sess) throws IOException{
- System.out.println("输入在服务器的指令:");
- while (true) {
- String line = stdoutReader.readLine();
- if (line == null)
- break;
- System.out.println(line);
- }
- System.out.println("输入指令后对应的显示信息:");
- while (true) {
- String line = stderrReader.readLine();
- if (line == null)
- break;
- System.out.println(line);
- }
- System.out.println("ExitCode: " + sess.getExitStatus());
- }
- }
文件压缩跟解压(本地&Linux服务器)的更多相关文章
- Linux之文件压缩与解压
文件压缩与解压 1.tar命令 tar命令可以为Linux的文件和目录创建档案. 利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar最初被用来 ...
- CSharp tar类型文件压缩与解压
最近闲暇时间开始写点通用基础类在写到tar类型文件压缩与解压时遇到点问题 压缩用的类库我是下载的 SharpZipLib_0860版本 先上代码 加压核心 /// <summary> // ...
- I/O操作之文件压缩与解压
与文件压缩与解压相关的类在java.util.zip包下 实例 //文件压缩 import java.io.File; import java.io.FileInputStream; import j ...
- 文件压缩、解压工具类。文件压缩格式为zip
package com.JUtils.file; import java.io.BufferedOutputStream; import java.io.File; import java.io.Fi ...
- linux下文件压缩与解压操作
对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕.别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rap.可 ...
- 16 Linux系统的文件压缩、解压与归档
这一节的内容,我们详细介绍下Linux的文件压缩.解压缩与文件归档的内容,也就是tar.gzip.bzip2.xz等命令的内容: 压缩(compress)与解压缩(uncompress) Linux系 ...
- Linux 下文件压缩与解压命令详解
tar 命令 -c 建立压缩档案 -x 解压 -t 查看内容 -r 向压缩归档文件末尾追加文件 -u 更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中 ...
- Linux文件压缩/打包/解压
在Linux日常维护中,经常需要备份同步一些比较重要的文件,而在传输过程中如果文件比较大往往会非常慢,而且还会非常占用空间,这时候就需要我们使用压缩工具对大文件进行压缩打包,下面我们来介绍一下常用的压 ...
- Linux中文件压缩与解压
压缩与解压 compress 文件名 1 -v //详细信息 2 3 -d //等于 uncompress 默认只识别 .Z 如果使用别的后缀,会导致不识别,解压缩失败.也可以使用 -d -c 压缩包 ...
随机推荐
- Spring IOC 剖析
模拟实现 Spring Ioc 控制反转功能 使用 => 原理 => 源码 => 模拟实现 使用:了解 原理:熟悉 源码 And 模拟实现: 精通 对照 Spring 功能点 Spr ...
- Python中 *args 和 **kwargs 的含义?
答:在python中,*args和**kwargs通常使用在函数定义里.*args 和 **kwargs 都允许你给函数传不定数量的参数,即使在定义函数的时候不知道调用者会传递几个参数.ps: *ar ...
- C#LeetCode刷题之#707-设计链表(Design Linked List)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4118 访问. 设计链表的实现.您可以选择使用单链表或双链表.单链 ...
- 设计模式实战系列之@Builder和建造者模式
前言 备受争议的Lombok,有的人喜欢它让代码更整洁,有的人不喜欢它,巴拉巴拉一堆原因.在我看来Lombok唯一的缺点可能就是需要安装插件了,但是对于业务开发的项目来说,它的优点远远超过缺点. 我们 ...
- Ubuntu 18.04 安装配置 go 语言
Ubuntu 18.04 安装配置 go 语言 1.下载 下载 jdk 到 Downloands 文件夹下 cd 进入 /usr/local, 创建 go 文件夹, 然后 cd 进这个文件夹 cd / ...
- 笔记:HTTP协议基础
一.HTTP协议特点: 简单快速,请求方式有get.post.head 等8种 无连接无状态 支持模式有 B/S(浏览器) C/S(通过websocket去通信) URL,统一资源定位符,在网络中用来 ...
- (趣味哈哈镜)JMF中摄像头相关的问题
JMF已经非常古老了.最近由于做实验的需要,不得不使用JMF处理视频.开发使用win10系统和eclipse.使用中的问题如下: 1.首先想要使用JMF需要必须安装32位JDK,同时编译软件也需要是3 ...
- Linux内核之 内存管理
前面几篇介绍了进程的一些知识,从这篇开始介绍内存.文件.IO等知识,发现更不好写哈哈.但还是有必要记录下自己的所学所思.供后续翻阅,同时写作也是一个巩固的过程. 这些知识以前有文档涉及过,但是角度不同 ...
- zookeeper基本配置以及一些坑
配置 1. 解压安装包:tar zxvf zookeeper-3.4.14.tar.gz 2. 修改zookeeper配置: #Master cd zookeeper-3.4.14 #创建日志文件夹及 ...
- edge 修改链接打开方式
我目前的edge版本是 Version 84.0.522.63 (Official build) (64-bit) 每次点击链接, 都是默认在原页面打开新标签, 不符合过往习惯. 修改方式 打开控制面 ...