文件压缩跟解压(本地&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 压缩包 ...
随机推荐
- 申请支付宝app支付签约综合评分不足,拒绝不通过快速强开通支付宝App支付强开,强开支付宝App支付产品权限!
一.如何开通支付宝App支付 正常来说,按照官方的指引要求填写相关资料,即可开通支付宝手机网站支付.但是,更多的时候我们的申请都会碰到一些阻力,常见的阻力就是“系统综合评估签约条件不满足,谢谢您的支持 ...
- 一篇看懂Socket开发
Socket[套接字]是什么,对于这个问题,初次接触的开发人员一般以为他只是一个通讯工具. Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发 T ...
- 文章目录&友情链接
文章目录&友情链接 1:<公告:本博客开始写博文了> 2.本人网络图书馆
- go genetlink demo
原文链接:https://github.com/mdlayher/genetlink [root@wangjq test]# cat genetlink.go package main import ...
- 个人项目wordcount
1.Github项目地址:https://github.com/inimble/wordcount.git 2.估算耗费的时间(如右表) PSP2.1 Personal Software Proces ...
- 企业项目实战 .Net Core + Vue/Angular 分库分表日志系统五 | 完善业务自动创建数据库
教程预览 01 | 前言 02 | 简单的分库分表设计 03 | 控制反转搭配简单业务 04 | 强化设计方案 05 | 完善业务自动创建数据库 说明 这节来把基础的业务部分完善一下. 因为 IQue ...
- 从开源协议到谷歌禁用华为、Docker实体清单事件
平时我们在日常开发生活都在大量和开源软件打着交道,例如安卓.Linux.Github.Docker等,而其中开源协议比如MIT.Apache也是耳熟能详,但是真正对开源协议的了解相信对大部分人来说都 ...
- akka-grpc - 应用案例
上期说道:http/2还属于一种不算普及的技术协议,可能目前只适合用于内部系统集成,现在开始大面积介入可能为时尚早.不过有些项目需求不等人,需要使用这项技术,所以研究了一下akka-grpc,写了一篇 ...
- 程序员必知必会Git的小知识
单人开发 1.初始化一个仓库 git init //cd到你工作的文件夹,初始化git仓库,默认会生成.git隐藏目录 2.配置自己的信息(Git 不喜欢不愿透漏姓名的人) git config -- ...
- 跨站请求伪造(csrf)的防护手段
CSRF CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求. 造成的问题:个人隐私泄露以及财产安全. CS ...