• Dream------Java--ant zip 对压缩文件进行指定位置的修改


    ant zip 对压缩文件进行指定位置的修改

    实现功能:

    对2中文件进行修改:

    需求:

    在XX文件中,从二进制流的200字节位置开始,往后的30位字节数量.插入一个值

    由于涉及到公司内部,不方便写太多。

    代码:

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Enumeration;
    
    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipFile;
    import org.apache.tools.zip.ZipOutputStream;
    
    /**
     * add by wls 2015年8月26日14:16:22
     * @author wls
     * 
     *
     */
    public class FXCopyrightProtectionUtil {
    
        //解析odfx格式
        public static void copyright_ODFX(String zipPath, String uuid) throws IOException {
              String[] path = zipPath.split("\.");
              String newPath="";
              //拿到去掉后缀名的路径+文件名,为重命名做准备
              if(path.length==2){
                  newPath = path[0];  
              }
              File zipFile = new File(zipPath);
              if(zipFile!=null){
                  String zfName = zipFile.getName();
                  System.out.println(zipFile.getName());
                  String[] zfArray = zfName.split("\.");
                  if(zfArray.length>0){
                      if("xx".equals(zfArray[1])){
                          if (!zipFile.exists())
                               throw new RuntimeException("zip file " + zipPath
                                 + " does not exist.");
                          zipFile.renameTo(new File(newPath+"副本."+zfArray[1]));
                          File newFile = new File(newPath+"副本."+zfArray[1]);
                          System.out.println("newFile="+newFile.getName());
                          File dFile = new File(zipPath);
                          ZipFile zipf = new ZipFile(newFile, "gbk");
                          ZipOutputStream zipOutputStream = new ZipOutputStream(dFile);
                          zipOutputStream.setEncoding("gbk");
                          Enumeration<ZipEntry> entries = zipf.getEntries();
                          while (entries.hasMoreElements()){
                              // 从压缩文件中获取一个条目
                              ZipEntry entry = entries.nextElement();
                              zipOutputStream.putNextEntry(entry);
                              if(!entry.isDirectory()){
                                  // 获得该条目对象的数据流
                                  InputStream is = zipf.getInputStream(entry);
                                  System.out.println("---entry.getName"+entry.getName());
                                  byte[] buff = new byte[199];
                                  byte[] buff2 = new byte[2048];
                                  int len = 0;
                                  int a = 1;
                                  while((len = is.read(buff)) != -1){
                                      if(a==1){
                                          if ((len = is.read(buff)) != -1) {
                                                //fos.write(buff, 0, len);
                                                zipOutputStream.write(buff,0, len);
                                                //zipOutputStream.write("c63a5b08-7c22-47df-825d-9725194c0714".getBytes(),0,36);
                                                zipOutputStream.write(uuid.getBytes(),0,30);
                                                a++;
                                                //System.out.println("a =1 --len="+len);
                                          }
                                        
                                      }else{
                                          if ((len = is.read(buff2)) != -1) {
                                                //fos.write(buff, 0, len);
                                                zipOutputStream.write(buff2,0, len);
                                                //System.out.println("len="+len);
                                            }
                                      }
                                  }
                                  is.close();
                                  //zipOutputStream.finish();
                                  zipOutputStream.close(); 
                                  zipOutputStream.closeEntry();
                              }
                          }
                      }
                  }
              }
             }
        
        //解析ftpx格式
        public static void copyright_FTPX(String zipPath,String uuid) throws IOException{
             String[] path = zipPath.split("\.");
              String newPath="";
              //拿到去掉后缀名的路径+文件名,为重命名做准备
              if(path.length==2){
                  newPath = path[0];  
              }
            File zipFile = new File(zipPath);
              if(zipFile!=null){
                  String zfName = zipFile.getName();
                  System.out.println(zipFile.getName());
                  String[] zfArray = zfName.split("\.");
                  if(zfArray.length>0){
                      if("xxx".equals(zfArray[1])){
                          if (!zipFile.exists())
                               throw new RuntimeException("zip file " + zipPath
                                 + " does not exist.");
                          //重命名
                          zipFile.renameTo(new File(newPath+"副本."+zfArray[1]));
                          File newFile = new File(newPath+"副本."+zfArray[1]);
                          System.out.println("newFile="+newFile.getName());
                          File dFile = new File(zipPath);
                          ZipFile zipf = new ZipFile(newFile, "gbk");
                          ZipOutputStream zipOutputStream = new ZipOutputStream(dFile);
                          zipOutputStream.setEncoding("gbk");
                          Enumeration<ZipEntry> entries = zipf.getEntries();
                          while (entries.hasMoreElements()){
                              // 从压缩文件中获取一个条目
                              ZipEntry entry = entries.nextElement();
                              zipOutputStream.putNextEntry(entry);
                              // 获得该条目对象的数据流
                              InputStream is = zipf.getInputStream(entry);
                              System.out.println("name="+entry.getName());
                              if(!entry.isDirectory()){
                                  if("zzz/zzz.key".equals(entry.getName())){
                                      byte[] buff = new byte[128];
                                      int len = 0;
                                      int a = 1;
                                      while((len = is.read(buff)) != -1){
                                          if(a==1){
                                            zipOutputStream.write(uuid.getBytes(),0,30);
                                            zipOutputStream.write(buff,0, len);
                                            a++;
                                            //System.out.println("a =1 --len="+len);
                                          }else{
                                            zipOutputStream.write(buff,0, len);
                                            //System.out.println("len="+len);
                                          }
                                      }
                                  }else{
                                      byte[] buff = new byte[2048];
                                      int len = 0;
                                      while((len = is.read(buff)) != -1){
                                            zipOutputStream.write(buff,0, len);
                                     }
                                  }
                              }
                              is.close();
                          }
                        //System.out.println("---entry.getName"+entry.getName());
                          //zipOutputStream.finish();
                          zipOutputStream.close(); 
                          zipOutputStream.closeEntry();
                      }
                  }
              }
        }
        
        //解析2中格式
        public static void copyright(String zipPath,String uuid) throws IOException{
             String[] path = zipPath.split("\.");
              String newPath="";
              //拿到去掉后缀名的路径+文件名,为重命名做准备
              if(path.length==2){
                  newPath = path[0];  
              }
            File zipFile = new File(zipPath);
              if(zipFile!=null){
                  String zfName = zipFile.getName();
                  System.out.println(zipFile.getName());
                  String[] zfArray = zfName.split("\.");
                  if(zfArray.length>0){
                          if (!zipFile.exists())
                               throw new RuntimeException("zip file " + zipPath
                                 + " does not exist.");
                          //重命名
                          zipFile.renameTo(new File(newPath+"副本."+zfArray[1]));
                          File newFile = new File(newPath+"副本."+zfArray[1]);
                          System.out.println("newFile="+newFile.getName());
                          File dFile = new File(zipPath);
                          ZipFile zipf = new ZipFile(newFile, "gbk");
                          ZipOutputStream zipOutputStream = new ZipOutputStream(dFile);
                          zipOutputStream.setEncoding("gbk");
                          Enumeration<ZipEntry> entries = zipf.getEntries();
                          while (entries.hasMoreElements()){
                              // 从压缩文件中获取一个条目
                              ZipEntry entry = entries.nextElement();
                              zipOutputStream.putNextEntry(entry);
                              // 获得该条目对象的数据流
                              InputStream is = zipf.getInputStream(entry);
                              System.out.println("name="+entry.getName());
                              if(!entry.isDirectory()){
                                  if("xxx".equals(zfArray[1])){
                                  if("docProps/auth.key".equals(entry.getName())){
                                      byte[] buff = new byte[128];
                                      int len = 0;
                                      int a = 1;
                                      while((len = is.read(buff)) != -1){
                                          if(a==1){
                                            zipOutputStream.write(uuid.getBytes(),0,30);
                                            zipOutputStream.write(buff,0, len);
                                            a++;
                                          }else{
                                            zipOutputStream.write(buff,0, len);
                                          }
                                      }
                                  }else{
                                      byte[] buff = new byte[2048];
                                      int len = 0;
                                      while((len = is.read(buff)) != -1){
                                            zipOutputStream.write(buff,0, len);
                                     }
                                  }
                                  }else if("xx".equals(zfArray[1])){
                                      byte[] buff = new byte[199];
                                      byte[] buff2 = new byte[2048];
                                      int len = 0;
                                      int a = 1;
                                      while((len = is.read(buff)) != -1){
                                          if(a==1){
                                              if ((len = is.read(buff)) != -1) {
                                                    zipOutputStream.write(buff,0, len);
                                                    zipOutputStream.write(uuid.getBytes(),0,30);
                                                    a++;
                                              }
                                            
                                          }else{
                                              if ((len = is.read(buff2)) != -1) {
                                                    zipOutputStream.write(buff2,0, len);
                                                }
                                          }
                                      }
                                  }
                              }
                              is.close();
                          }
                          //zipOutputStream.finish();
                          zipOutputStream.close(); 
                          zipOutputStream.closeEntry();
                      
                  }
              }
        }
        
        //验证
        public static void myvalidate(String zipPath) throws IOException{
            File zipFile = new File(zipPath);
            if (!zipFile.exists())
                   throw new RuntimeException("zip file " + zipPath
                     + " does not exist.");
    
                  ZipFile zipf = new ZipFile(zipFile, "gbk");
                  Enumeration<ZipEntry> entries = zipf.getEntries();
                  while (entries.hasMoreElements()){
                      // 从压缩文件中获取一个条目
                      ZipEntry entry = entries.nextElement();
                      if(!entry.isDirectory()){
                          // 获得该条目对象的数据流
                          InputStream is = zipf.getInputStream(entry);
                          FileOutputStream fos = new FileOutputStream(new File("C:/Users/Administrator/Desktop/myvalidate.txt"));
                          byte[] buff = new byte[199];
                          byte[] buff2 = new byte[30];
                          int len = 0;
                          int a = 1;
                          while(a<=2){
                              if(a==1){
                                  if ((len = is.read(buff)) != -1) {
                                      a++;
                                  }
                                  
                              }else{
                                  if ((len = is.read(buff2)) != -1) {
                                        //fos.write(buff, 0, len);
                                        fos.write(buff2,0, len);
                                        System.out.println("len="+len);
                                    }
                                  a++;
                              }
                          }
                          is.close();
                          fos.close();
                          //zipOutputStream.finish();
                      }
                  }
        }
        public static void main(String[] args) throws Exception {
            // TODO Auto-generated method stub
             String dir = new String("C:/Users/Administrator/Desktop/wlsxxx.zip");
             String dir2 = new String("C:/Users/Administrator/Desktop/wlsxx.zip");
             String uuid = "c63a5b08-7c22-47df-825d-9725194c0714";
             //copyright_ODFX("C:/Users/Administrator/Desktop/示例素材.xx", uuid);
             //copyright_FTPX("C:/Users/Administrator/Desktop/示例模板.xxx",uuid);
             copyright("C:/Users/Administrator/Desktop/示例模板.xxx",uuid);
             copyright("C:/Users/Administrator/Desktop/示例素材.xx", uuid);
             //myvalidate(dir);
        }
    
    }
  • 相关阅读:
    查看某个进程PID对应的文件句柄数量,查看某个进程当前使用的文件句柄数量
    Ubuntu16.04下KeepAlived+Nginx 布署
    Nginx+keepalived 高可用双机热备(主从模式/双主模式)
    LVS+KeepAlived+Nginx高可用实现方案
    golang 日志模块(log)
    redcon, Redis兼容的服务器框架
    Python进阶---python strip() split()函数实战(转)
    批量部署 自动化之
    malloc、calloc、realloc的区别(转)
    随机抽样一致性算法(RANSAC)
  • 原文地址:https://www.cnblogs.com/wangliansong/p/4761202.html
Copyright © 2020-2023  润新知