带注释解释代码

package com.zcl.Test;import java.io.*;
import java.net.HttpURLConnection;
import java.net.Socket;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;/*** 从https://gitcode.net/tasking/Encrypt-decrypt-files/-/raw/master/AES.zip 网址下载AES.zip,* 编写程序解压AES.zip,* 将得到若干经过先经过AES算法加密,* 然后经过Base64编码后的文件,* 秘钥为1111222233334444,加密模式为CBC,偏移量为5555666677778888,* 请解密文件中的内容,并且重新打包成一个压缩包。*/
public class Test1 {public static void main(String[] args) {String url = "https://gitcode.net/tasking/Encrypt-decrypt-files/-/raw/master/AES.zip";DownAndReadFile(url);}/*** 远程文件下载地址** @param filePath 网络文件请求地址*/public static void DownAndReadFile(String filePath) {long startTime = System.currentTimeMillis();// 获取的年月日对象信息String data = new SimpleDateFormat("yyyy-MM-dd").format(new Date());//创建一个下载文件的文件路径String dir = "F:\2022C4java基础认证2\远程下载解压解密压缩任务\code\远程请求下载" + data;// 声明文件对象File saverPath = new File(dir);// 判断文件是否存在if (!saverPath.exists()) {// 文件不存在就创建一个一级目录【远程请求下载】saverPath.mkdir();}// 根据/切割接受到的请求网络URLString[] urlName = filePath.split("/");// 获取到切割的字符串数组长度-1int len = urlName.length - 1;// 获取到请求下载文件的名称String uname = urlName[len];// System.out.println(uname); // AES.zip// 跳过try捕获错误try {// 创建保存文件对象File file = new File(saverPath + "//" + uname);//创建新文件if (file != null && !file.exists()) {file.createNewFile();}// 通过高效字节输出流输出创建的文件对象BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file));// 创建URL对象[请求路径]URL url = new URL(filePath);// 返回一个URLConnection实例,表示与URL引用的远程对象的URLHttpURLConnection uc = (HttpURLConnection) url.openConnection();uc.setDoInput(true); // 设置的值 doInput领域本 URLConnection指定值。uc.connect(); // 打开与此URL引用的资源的通信链接,如果此类连接尚未建立。// 获取服务端的字节输入流InputStream inputStream = uc.getInputStream();System.out.println("file size is:" + uc.getContentLength()); // 打印文件的长度// 声明字节数组存放读取的文件byte[] b = new byte[1024 * 4];int byteRead = -1; // 定义读取次数// 循环读取while ((byteRead = inputStream.read(b)) != -1) {bufferedOutputStream.write(b, 0, byteRead); // 将读取的文件跳过高效的字节流输出}// 关闭流和刷新流inputStream.close();bufferedOutputStream.close();long endTime = System.currentTimeMillis();System.out.println("下载耗时:" + (endTime - startTime) / 1000 * 1.0 + "s");System.out.println("文件下载成功!");// ---------- 解压文件 ----------StringBuffer strb = new StringBuffer();// 创建高效的字节输入管道BufferedInputStream fs = new BufferedInputStream(new FileInputStream(saverPath + "//" + uname));BufferedReader br = new BufferedReader(new InputStreamReader(fs, "UTF-8")); // 指定读取的编码格式); // 高效缓存字节读取String date = ""; // 记录读取一行的数据// 循环读取while ((date = br.readLine()) != null) {strb.append(data + "
"); // 将读取的数据赋值给可变的字符串}// 关闭相关的流br.close();fs.close();System.out.println("解压文件中...");//解压unZipFiles(dir + "/AES.zip", dir + "/");} catch (Exception e) {e.printStackTrace();}}/*** 解压的文件** @param zipPath 压缩文件* @param descDir 解压存放的位置* @throws Exception*/public static void unZipFiles(String zipPath, String descDir) throws Exception {System.out.println("解压文件的名称:" + zipPath + "
解压的文件存放路径:" + descDir);unZipFiles(new File(zipPath), descDir); // 调用方法}/*** 解压文件到指定的位置** @param zipFile 解压文件* @param descDir 存放目录*/@SuppressWarnings("rawtypes") // 抑制警告【原始类型】public static void unZipFiles(File zipFile, String descDir) throws Exception {// 创存放文件的对象File pathFile = new File(descDir);// 判断文件是否存在if (!pathFile.exists()) {// 创建目录[不找到压缩文件里的内容,所以需要创建多级目录]pathFile.mkdirs();}// 创建压缩包条目ZipFile zip = new ZipFile(zipFile); // 此类用于从zip文件读取条目。// entries() 打开一个ZIP文件,读取指定的File对象。for (Enumeration entries = zip.entries(); entries.hasMoreElements(); ) {ZipEntry entry = (ZipEntry) entries.nextElement(); // 获取条目String zipEntryMame = entry.getName(); // 获取条目名InputStream in = zip.getInputStream(entry); // 获取文件的输入流String outPath = (descDir + zipEntryMame).replaceAll("\*", "//"); // 替换全部// 判断路径是否存在File file = new File(outPath.substring(0, outPath.lastIndexOf("/")));// 判断文件,不存在就创建if (!file.exists()) {file.mkdirs(); // 多级目录}// 判断文件路径是否为文件if (new File(outPath).isDirectory()) {continue;}// 输出文件的路径System.out.println(outPath);// 创建字节输出流FileOutputStream out = new FileOutputStream(outPath);// 创建字节数组byte[] byf1 = new byte[1024];int len;while ((len = in.read(byf1)) != -1) {out.write(byf1);}// 关闭流in.close();out.close();}System.out.println("文件解压成功");}
}

使用java程序下载远程zip文件并解压文件( 带注释解释代码)相关推荐

  1. 【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题

    [踩坑]Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题 一. 问题重现 二. 问题解决思路 1. 确认是不是上传就导致数据出错了 2. 是不是平台问题 三. ...

  2. tar 打包文件与解压文件

    tar 命令打包文件与解压文件 打包文件 1.把/root目录下的test1整个打包为test1.tar文件,如下所示 [root@localhost ~]# pwd /root [root@loca ...

  3. java 压缩 空目录_java zip压缩与解压-支持空目录,保留文件修改时间

    java zip压缩与解压-支持空目录,保留文件修改时间. 依赖于commons-io,commons-compress [Java]代码 import java.io.BufferedInputSt ...

  4. python打包zip文件_python 解压文件,合并文件 打包成zip格式文件 生成MD5值

    #!/usr/bin/env python #_*_encoding:utf-8 # 2018/05/29 #augustyang #2.0 ''' 解压文件,合并文件 打包成zip格式文件 生成MD ...

  5. LZMA压缩文件与解压文件

    Hello,我是KitStar. 以下文章整理的不对.还请见谅. Unity的Assetbundle是使用LZMA压缩算法压缩的,它是一个开源的类库,有C. C++.C#.JAVA的类库,Unity里 ...

  6. Linux下python如何解压rar文件,RAR解压文件

    默认在linux下我们不能解压压缩rar文件,那我们如何使用呢? 我们可以下载rarlinux安装包实现解压压缩后缀为rar的包 下载地址:https://www.rarlab.com/downloa ...

  7. Linux压缩文件与解压文件(*.zip)

    1.把/home目录下面的mydata目录压缩为mydata.zip zip -r mydata.zip mydata #压缩mydata目录 2.把/home目录下面的mydata.zip解压到my ...

  8. zip、rar解压文件

    1.添加zip.rar依赖 <!-- 解压rar --> <dependency><groupId>com.github.junrar</groupId> ...

  9. zip和tar解压文件到指定文件夹

    1.unzip解压到指定文件夹 unzip *.zip -d path/ 2.tar解压到指定文件夹 tar -zxvf *.tgz -C path/

最新文章

  1. 【美团】招聘计算机视觉研究岗实习生
  2. python0b1010_笔记-python-字符串格式化-format()
  3. Java之JVM 优化经验总结
  4. 转载:Systemd 命令
  5. 深入理解 ngrx effect 背后的工作机制
  6. python画正方形内切圆_python画出三角形外接圆和内切圆的方法
  7. mybatis-plus大批量数据插入缓慢问题
  8. “智享未来 知行合一”,开为科技助力企业开启人工智能新时代
  9. 理解SQL Server中的权限体系(下)----安全对象和权限
  10. python模块cv2人脸识别_Python基于Opencv来快速实现人脸识别过程详解(完整版)
  11. 进入方法内快捷键_肝货|驱动安装流程驱动amp;快捷键设置(一)
  12. jvm最大最小内存参数设置
  13. 黄聪:C#索引器详解、示例
  14. 【Ansible】Ansible 连接主机显示报错的处理方案
  15. 网口压线顺序_网线水晶头接法
  16. word2007如何删除尾注分隔符
  17. Buuctf:[MRCTF2020]你传你呢
  18. Image fusion in the loop of high-level vision tasks: Seafusion总结与代码注释
  19. 维沃丫3手机微信无法连接服务器1.104,手机微信网络连接不可用?教你4个方法,轻松解决网络问题!...
  20. 【 反向传播算法 Back-Propagation 数学推导以及源码详解 深度学习 Pytorch笔记 B站刘二大人(3/10)】

热门文章

  1. 什么邮件会被标记为垃圾邮件_停止将电子邮件标记为垃圾邮件的6种方法
  2. 华为手机锁屏后显示无法连接服务器,锁屏状态可以远程连接服务器
  3. [转]读《程序员应该知道的97件事》
  4. 尝鲜使用hpm-cli编译鸿蒙Harmonyos组件
  5. mysql批量导入sql文件
  6. 导入excel并批量插入到数据库
  7. 蓝桥杯——x星球甲壳虫车队进检查站
  8. 西门子PPI协议开发
  9. matlab信号分析实验报告,信号分析及处理实验报告(基于MATLAB).doc
  10. 苹果自带相册打马赛克_保护隐私!慎用苹果手机自带的画笔打马赛克