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); } }