文件压缩跟解压(本地&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 压缩包 ...
随机推荐
- 【MySQL】如何最大程度防止人为误操作MySQL数据库?这次我懂了!!
写在前面 今天,一位哥们打电话来问我说误操作了他们公司数据库中的数据,如何恢复.他原本的想法是登录数据库update一个记录,结果忘了加where条件,于是悲剧发生了.今天,我们不讲如何恢复误操作的数 ...
- 2020-07-07:mysql如何实现跨库join查询?
福哥答案2020-07-07: 1.同服务跨库.表名称带上库名.SELECT * FROM 数据库名称1.表名称 JOIN 数据库名称2.表名称 ON 数据库名称1.表名称.tid = 数据库名称2. ...
- stat 命令家族(2)- 详解 pidstat
性能测试必备的 Linux 命令系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1819490.html 介绍 对 Linux 任务的统计 ...
- 数据库之Oracle优化技巧(二)
1.通过内部函数提高 SQL 效率 复杂的 SQL 往往牺牲了执行效率. 能够掌握上面的运用函数解决问题的方法在实际 工作中是非常有意义的 . 2.使用表的别名(Alias) 当在 SQL 语句中连接 ...
- Web框架的原理详情
Web框架的原理 Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. socket服务 ...
- setjmp()/longjmp()的使用方法
setjmp和longjmp.为了让你实现复杂的流控制,程序在系统里面运行完全依靠内存(代码段,全局段,堆存储器,栈存储器)和寄存器的内容(栈指针,基地址,计数器),setjmp保存当前的寄存器里面的 ...
- Jmeter逻辑控制器之If Controller的使用解析
一.If Controller概述 类似于编程语言中if语句,根据给定表达式的值决定是否执行该节点下的子节点,表达式的值 为true则执行,为false则不执行,默认使用javascript语法进行判 ...
- virt-install 安装系统和启动虚机
安装系统: virt-install -n x1 -r --vcpus --disk path=/home/wangjq/x1.qcow2,size=,format=qcow2,bus=virtio, ...
- iptables初步接触
0.iptables命令选项输入顺序:iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网 ...
- 数据分析-RFM模型用户分析
RFM模型 根据美国数据库营销研究所Arthur Hughes的研究,客户数据库中有3个神奇的要素,这3个要素构成了数据分析最好的指标: 最近一次消费 (Recency) 消费频率 (Frequenc ...