前有有讲过,如何通过JAVA,将冲突制作成自解压的可执行程序的扩展名文件。现收到需求:用户下载可执行程序的扩展名时,自动往可执行程序的扩展名文件中添加或覆盖某文件。
思路:
1、由于自解压的可执行程序的扩展名文件由sfx、config.txt、7z压缩文件组成。所以直接用SevenZFile是打不开该文件的。
2、从可执行程序的扩展名文件中,找到config.txt结尾标识的位置(位置)。
3、将可执行程序的扩展名文件拆会成两具临时文件件:sfx config.txt文件,z7.7z压缩包文件。
4、调用SevenZFile,添加中覆盖文件组成新的压缩文件newz7.7z压缩包。
5、合并sfx config.txt文件、newz7.7z压缩包成可执行程序的扩展名生解压文件。
代码如下:
其中:d:test7z自解压。可执行程序的扩展名为自解压可执行程序的扩展名文件。
/**
* 查找文件中的config.txt结尾位置
*
* @抛出IOException
*/
@测试
public void getConfigEndPosTest()引发IOException {
最终文件exeFile=新文件(' d:test7z自解压. exe ');
最终字节[]配置结束=';@InstallEnd@!"。getBytes(' ISO-8859-1 ');
final BufferedInputStream exeBis=new BufferedInputStream(新文件inputstream(exeFile));
//sfx假定大于124928
exebis。skip(124928);
int b;
long pos=124928
int macth=0;
while ((b=exeBis.read())!=-1) {
刷卡机
if(配置结束[macth]==b){ 0
麦克思
} else {
macth=0;
}
if(macth==15){ 0
系统。出去。打印(pos);
打破;
}
}
exebis。close();
}
/**
* 自解压文件拆分成: sfx配置,7z两个临时文件
*
* @抛出IOException
*/
@测试
public void splitFileTest()引发了IOException {
最终文件exeFile=新文件(' d:test7z自解压. exe ');
最终文件inputstream exeIn=新文件input stream(ExeFile);
最终文件sfxFile=新文件(' d : testsfx。tmp’);
sfxfile。新建文件();
最终文件输出流sfxOs=新文件输出流(sfxFile);
//125070 第一步求得的刷卡机
byte[]buffer=new byte[125070];
(同Internationalorganizations)国际组织长度;
length=exeIn.read(缓冲区);
sfxOs.write(缓冲区,0,长度);
sfxos。close();
最终文件z7File=新文件(' d : testz 7.7z ');
z7文件。新建文件();
最终文件输出流z7Os=新文件输出流(z7文件);
while((长度=Exein。读取(缓冲区))0){ 0
z7Os.write(缓冲区,0,长度);
}
z7os。close();
exein。close();
}
/**
* 添加或覆盖的文件到7z
*
* @抛出IOException
*/
@测试
public void writeFileTo7z()引发了IOException {
//略,7z文件处理
}
/**
* sfx配置新的7z文件成exe .
* @抛出IOException
*/
@测试
public void mergeFile()引发了IOException {
//略,参考前一篇的《JAVA JAR制作可自运行的EXE包》
}