文件压缩跟解压(本地&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 压缩包 ...
随机推荐
- 主成分分析PCA数据降维原理及python应用(葡萄酒案例分析)
目录 主成分分析(PCA)——以葡萄酒数据集分类为例 1.认识PCA (1)简介 (2)方法步骤 2.提取主成分 3.主成分方差可视化 4.特征变换 5.数据分类结果 6.完整代码 总结: 1.认识P ...
- C#LeetCode刷题之#892-三维形体的表面积(Surface Area of 3D Shapes)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4136 访问. 在 N * N 的网格上,我们放置一些 1 * 1 ...
- west_wild 靶机
ways:smb枚举+suid提权 1:扫描主机发现IP 老套路:netdiscover 一波 2:nmap扫描,发现开放的 端口很多并且开放是SMB协议 3:对目录扫描,发现没有可以利用的点 4:从 ...
- next()与nextLine()的区别
abc def ghij kl mno pqr st uvw xyz 你用next(),第一次取的是abc,第二次取的是def,第三次取的是ghij 你用nextLine(),第一次取的是abc de ...
- 调试备忘录-J-Link RTT的使用(原理 + 教程 + 应用 + 代码)
MCU:STM32F407VE MDK:5.29 IAR:8.32 目录--点击可快速直达 目录 写在前面 什么是RTT? RTT的工作原理 RTT的性能 快速使用教程 高级使用教程 附上测试代码 2 ...
- JAVA8—————StringJoiner类
JAVA8——StringJoiner类引言:在阅读项目代码是,突然看到了StringJoiner这个类的使用,感觉很有意思,对实际开发中也有用,实际上是运用了StringBuilder的一个拼接字符 ...
- python基础 Day6
python Day6 id 可以获得python的内存地址 id的举例子 a=100 print(id(a)) #140712544153072 这里就是该对象的内存地址 is 判断的是比较内存地址 ...
- java程序CPU 100%调试
前置 PID为进程id,NID为线程ID 步骤一.找到最耗CPU的进程 top 然后键入P,按CPU占用率排序(M是按内存排序) 步骤二.找到进程中最耗CPU的线程 top -Hp PID 步骤三.将 ...
- Go:排序算法
一.冒泡排序 package main import "fmt" func BubbleSort(arr []int) { /* 思路:将大的元素一步一步"冒泡" ...
- Centos7 yum安装Python3.6环境,超简单
原文链接:https://blog.51cto.com/wenguonideshou/2083301 配置好Python3.6和pip3安装EPEL和IUS软件源 yum install epel-r ...