文件解压缩操作

2023-10-26

/**
 * 文件解压缩操作
 */
package com.general.system;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

/**

 * 参考:http://henterji.blogbus.com/logs/2005/12/2034091.html
 */

public class UndoZip {


 protected ZipFile zippy;
 protected byte[] b;
 
 UndoZip() {
  b = new byte[8092];
 }
 
 protected SortedSet dirsMade;
 
 public void unZip(String theOldPath,String theNewPath,String fileName) {
  dirsMade = new TreeSet();
  try {
   theOldPath = theOldPath.replaceAll("","/");
   theNewPath = theNewPath.replaceAll("","/");
   if(!theOldPath.endsWith("/")){
    theOldPath = theOldPath+"/";
   }
   if(!theNewPath.endsWith("/")){
    theNewPath = theNewPath+"/";
   }
   
   zippy = new ZipFile(theOldPath+fileName);
   Enumeration all = zippy.entries();
   while (all.hasMoreElements()) {
    getFile(theNewPath,(ZipEntry) all.nextElement());
   }
  }
  catch (IOException err) {
   System.err.println("IO Error: " + err);
   return;
  }
 }
 
 protected boolean warnedMkDir = false;
 
 @SuppressWarnings("unchecked")
 protected void getFile(String theNewPath,ZipEntry e) throws IOException {
  
  String zipName = theNewPath+e.getName();
  if (zipName.startsWith("/")) {
   if (!warnedMkDir){
    System.out.println("Ignoring absolute paths");
   }
   warnedMkDir = true;
   zipName = zipName.substring(1);
  }
  if (zipName.endsWith("/")) {
   return;
  }
  
  int ix = zipName.lastIndexOf('/');
  if (ix> 0) {
   String dirName = zipName.substring(0, ix);
   if (!dirsMade.contains(dirName)) {
    File d = new File(dirName);
    if (!(d.exists()&& d.isDirectory())) {
     if (!d.mkdirs()) {
      System.err.println("Warning: unable to mkdir "+ dirName);
     }
     dirsMade.add(dirName);
    }
   }
  }
  
  FileOutputStream os = new FileOutputStream(zipName);
  InputStream is = zippy.getInputStream(e);
  int n = 0;
  while ((n = is.read(b))> 0) {
   os.write(b, 0, n);
  }
  is.close();
  os.close();
 }
 /*
 public static void main(String[] args) {
  String theOldPath = "D:/My_item/CMS.war/WEB-INF/classes/com/general/system/test/";
  String theNewPath = "D:/ok/";
  UndoZip u = new UndoZip();
  u.unZip(theOldPath,theNewPath,"using.zip");
 }*/
}


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件解压缩操作 的相关文章

  • php:将变量内容下载为文件

    题主可以吗 我有一个正在执行的脚本 有一次 我在变量中有一大段文本 我可以将其作为可下载文件提供 而不实际将变量内容写入磁盘吗 如果您的意思是让用户单击链接并弹出一个对话框以将某些内容保存为文本文件
  • 如何在文本文件中找到最长的 N 行并将其打印到标准输出?

    第一行包含数字 N 的值 后跟多行 我可以按照n 2算法的顺序解决它 有人可以建议一个更好的吗 您可以使用最小堆并在 O n log N 中完成 heap new Min Heap N foreach line in text if len
  • 如何将带有嵌套节点(父/子关系)的 XML 导入 Access?

    我正在尝试将 XML 文件导入 Access 但它创建了 3 个不相关的表 也就是说 子记录被导入到子表中 但无法知道哪些子记录属于哪个父记录 如何导入数据来维护父子节点 记录 之间的关系 以下是 XML 数据的示例
  • 如何在 MS Access 中填充字段描述

    当通过 ODBC 尤其是 AS 400 链接到外部数据源时 我经常会在另一端遇到神秘的字段名称 而数据字典不可用 在极少数情况下 我能够从其他数据库获取字段描述 我希望能够一次导入它们 而不是一次将每个描述复制 粘贴到表设计表单中 我无法在
  • 如何创建静态字符串数组?

    Note这个问题包含 Rust 1 0 之前的语法 代码无效 但概念仍然相关 如何在 Rust 中创建全局静态字符串数组 对于整数 编译如下 static ONE u8 1 static TWO u8 2 static ONETWO sta
  • For-Of 循环与 For 循环

    这两者是相同的还是可以互换的 在哪些用例中 人们会选择其中一种而不是另一种 for let i of array some code for let i 0 i lt array length i some code EXAMPLE 完成该
  • 调用 PHP 爆炸并访问第一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 用于取消引用函数结果的 PHP 语法 https stackoverflow com questions 742764 php syntax for dereferencing function re
  • 使用 OpenFileDialog 选择文件和文件夹

    我做了很多研究来找到这个问题的合适答案 但我失败了 我可以在这里和其他论坛上看到多个问题 但没有明确的答案带来明确的解决方案 我希望 OpenFileDialog 为我选择一个 多个文件 并允许我也选择文件夹 例如 A 多个文件或多个文件夹
  • 打开文件对象的大小

    有没有办法找到当前打开的文件对象的大小 具体来说 我正在使用 tarfile 模块来创建 tarfile 但我不希望 tarfile 超过特定大小 据我所知 tarfile 对象是类似文件的对象 所以我想通用的解决方案会起作用 ls la
  • 滚动文件实现

    我一直很好奇滚动文件是如何在日志中实现的 如何开始用任何语言创建一个文件写入类 以确保不超过文件大小 我能想到的唯一可能的解决方案是 write method size file size size of string to write i
  • python string format() 与带有整数键的字典[重复]

    这个问题在这里已经有答案了 我想使用Python字符串format 充当快速而肮脏的模板 但是 那dict我想使用的键是整数 字符串表示形式 一个简化的例子如下 s hello there 5 d 5 you s format d 上面的代
  • 如何在 Rust 中删除字符串的第一个和最后一个字符?

    我想知道如何删除 Rust 中字符串的第一个和最后一个字符 Example Input Hello World Output ello Worl 您可以使用 chars 迭代器并忽略第一个和最后一个字符 fn rem first and l
  • 如何格式化字符串以在 Python 中使用 mysqldb 进行查询?

    我该如何正确执行此操作 我想做这样的查询 query SELECT FROM sometable order by s s limit s s conn app globals pool connection cur conn cursor
  • 将 linq 查询转换为字符串数组 - C#

    将单列 linq 查询转换为字符串数组的最有效方法是什么 private string WordList DataContext db new DataContext var list from x in db Words orderby
  • 对包含数字和字符串的数组进行排序

    我正在尝试对包含字符串 数字和数字作为字符串 例如 1 2 的数组进行排序 我想对这个数组进行排序 以便排序后的数组首先包含数字 然后包含包含数字的字符串 最后包含字符串 var arr 9 5 2 ab 3 1 to be sorted
  • 当用户输入时将输入值转换为货币格式

    我无法将输入值转换为货币格式 我想在用户键入数字 5 000 00 125 000 00 时自动添加千位和小数分隔符 这是我的代码 input CurrencyInput on blur focus keyup function this
  • 字符串包含相同的字符但仍然不同[重复]

    这个问题在这里已经有答案了 我正在尝试读取一个 txt 文件并使用每个句子作为团队的名称 同时使用该名称查找另一个 txt 文件以获取其内容 所有 txt 文件都位于我的资产文件夹的根目录中 第一个 txt 文件工作正常 我使用assetm
  • 如何接收在 PHP 中使用“application/octet-stream”发送的 POST 数据?

    这就是我正在处理的事情 我们的一个计划有一个支持表格 用户可以使用它来请求支持 此表单的作用是 它向 PHP 脚本执行 HTTP POST 请求 该脚本应该收集信息并将其转发到支持电子邮件地址 POST 请求包含三个类型的文本字段Conte
  • File.Delete 进程无法访问该文件,因为该文件正在被另一个进程使用

    public bool DownloadMp3File DownloadedMp3 mp3 WebClient client new WebClient string filePath bool wasDownload false try
  • DASM 汇编器中的 ASCII 到 C64 屏幕代码

    我正在通过 C64 模拟器学习 6502 micro 的汇编 目前正在尝试将字符串输出到屏幕 这是我的代码 processor 6502 org 1000 ldx 00 using x register as column counter

随机推荐

  • java中匿名内部类的匿名构造函数是怎么用的

    java中匿名内部类的匿名构造函数是怎么用的 下面的例子说明匿名内部类的匿名构造函数的用法 例2 7 2 0 interface FigureMark to win void whoAmI public class Test public
  • 刀片服务器切换显示,刀片机服务器切换

    刀片机服务器切换 内容精选 换一换 当保护组的生产站点发生故障时 将保护组的生产站点切到当前的容灾站点 即另一端AZ 启用当前容灾站点的云硬盘以及云服务器等资源 故障切换完成之后 保护组的当前生产站点变成故障切换发生之前的容灾站点 且生产站
  • 大数据开源框架之HBase编程实践

    HBase的安装部署请看 30条消息 大数据开源框架环境搭建 五 Hbase完全分布式集群的安装部署 木子一个Lee的博客 CSDN博客 目录 任务1 用HBase提供的HBase Shell命令实现以下指定功能 1 列出HBase所有的表
  • 我的创作纪念日

    机缘 我热爱编程 热爱解决问题 也享受在解决问题的过程中遇到的挑战 在大学的学习过程中 我发现将学习过程和解决问题的过程记录下来能够帮助我更深入地理解知识和技术 同时也为未来遇到类似问题提供了参考 我开始将我的学习笔记分享给同学们 收到了非
  • 二维矩形装箱问题

    装箱问题 是个NP问题 至于装箱问题到底是个什么东西 可以看看百度文档http wenku baidu com view f6e7f80590c69ec3d5bb755f html 其实我没看 研究二维矩形装箱问题 是因为需要将小图拼成大图
  • JAVA使用socket outputstream中碰到的问题

    今天在使用java的socket写网络通信 作为服务端向对端传送数据 建立连接后 首先发4个字节的内容 存放文件大小 然后再发送文件正文内容 代码是这样写的 Socket client new Socket 192 168 60 1 999
  • 谈谈Elasticsearch 和 传统关系型数据库的对比

    本帖最后由 mtsbv110 于 2016 3 22 15 03 编辑 1 在Elasticsearch中 文档归属于一种 类型 type 而这些类型存在于 索引 index 中 类比传统关系型数据库 Relational DB gt Da
  • PaddleOCR系列-训练模型并部署android手机

    PaddleOCR系列 训练模型并部署android手机 TOC PaddleOCR系列 训练模型并部署android手机 1 训练paddleocr模型 2 ocr模型部署安卓手机 2 1 AndroidStudio 2021 2 1或以
  • RecyclerView详解

    RecyclerView 简称 RV 是作为 ListView 和 GridView 的加强版出现的 目的是在有限的屏幕之上展示大量的内容 因此 RecyclerView 的复用机制的实现是它的一个核心部分 RV 常规使用方式如下 解释说明
  • ARM开发板挂接NFS网络文件系统

    1 交叉线连开发板和PC 2 LINUX IP PC IP和开发板IP属同一网段 LINUX IP 192 168 1 20 PC IP 192 168 1 30 做中转作用 开发板IP 192 168 1 10 3 ubuntu默认是没有
  • mysql 建表语句 stored as_Druid 解析Hive建表语句解析报错

    Druid 版本 com alibaba druid spring boot starter 1 2 3 Hive 建表SQL create table ads data sale detail one23 like ads data sa
  • HashMap的底层实现原理

    HashMap的底层实现原理 一 HashMap的底层实现原理 HashMap 在 JDK1 8 之前的实现方式 数组 链表 JDK1 8之后的实现方式 数组 链表 红黑树 原理 当你 new 一个 HashMap 的时候 它底层并没有创建
  • 有哪些副业适合教师?有哪些是教师禁止的副业?

    有哪些副业适合教师 有哪些是教师禁止的副业 老师做副业选择挺多的 但是很多人一上来就说什么辅导班 做点小生意之类的 大家怕是还不知道对于在编教师有些兼职副业是做不了的 有些事没有禁止可以做的 还有一些是鼓励做的 那些副业是老师坚决不能碰的
  • Java初学之标识符

    目录 一 什么是标识符 二 标识符的命名规则 三 标识符的命名规范 一 什么是标识符 标识符 identifier 是指用来标识某个实体的一个符号 在不同的应用环境下有不同的含义 在java源程序中 凡是程序员有权利自己命名的单词都是标识符
  • 关于数据导入,教你几招

    前言 我们知道 数据库是存放数据的仓库 日常我们使用数据库也是为了存储数据 和数据库打交道总免不了要进行数据导入工作 工作中也可能遇到各种不同的数据导入需求 本篇文章主要分享下数据导入相关的小技巧 希望你能学到几招 1 弄清需求是关键 在进
  • AIX 常用命令

    查看所有vg对应的lv lsvg o lsvg i l 查看一个lv的详细细心 lv对应的日志文件 getlvcb AT fslv01 VGDA与ODM的同步 synclvodm v vght vg 名字 umount被占用删除 fuser
  • TortoiseGit 入门指南05:推送和拉取

    本节所讲内容均涉及到 远端版本库 版本库 的概念在 TortoiseGit 入门指南02 创建和克隆仓库 中提到过 它是工作目录下面的一个名为 git 的隐藏目录 我们每一次提交 每一个分支都会保存在版本库中 这个版本库就在我们电脑上的某个
  • C算法:冒泡排序算法(超级详细)!!!

    冒泡排序算法 冒泡排序是一种简单的排序算法 它也是一种稳定排序算法 其实现原理是重复扫描待排序序列 并比较每一对相邻的元素 当该对元素顺序不正确时进行交换 一直重复这个过程 直到没有任何两个相邻元素可以交换 就表明完成了排序 一般情况下 称
  • 常用的三种代码宏定义

    常用的三种代码宏定义 方式一 if endif 方式二 ifdef endif 方式一 if和方式二 ifdef别混搅 方式三 ifndef define else endif 方式一 if endif define LEDTEST 1 1
  • 文件解压缩操作

    文件解压缩操作 package com general system import java io File import java io FileOutputStream import java io IOException import