zipoutputstream(怎么将一个ZipInputStream的ZipEntry转换成byte)

本文目录
- 怎么将一个ZipInputStream的ZipEntry转换成byte
- ZipOutputStream 中的putNextEntry和ZipInputStream中的getNextEntry方法是什么意思
- java zipOutputStream 对于closeEntry() 的问题
- java中用ZipOutputStream进行压缩文件,如何让生成的压缩文件的ZipEnity为只读的
- zipoutputstream 要添加什么dll
- java ZipOutputStream 压缩包里面压缩多个文件(格式为zip文件)
- Java 中.ZipOutputStream 转成 ZipInputStream 文件流.!
- java怎样使用ZipOutputStream和ZipInputStream压缩和解压缩
怎么将一个ZipInputStream的ZipEntry转换成byte
Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解
压缩的实现比较容易,下面介绍利用ZipEntry、ZipInputStream和ZipOutputStream三个Java
类实现zip数据压缩方式的编程方法。
zip压缩文件结构:一个zip文件由多个entry组成,每个entry有一个唯一的名称,entry的
数据项存储压缩数据。
与zip文件有关的几个Java类
·类ZipEntry
public ZipEntry(String name);
name为指定的数据项名。
·类ZipOutputStream
ZipOutputStream实现了zip压缩文件的写输出流,支持压缩和非压缩entry。下面是它的
几个函数:
public ZipOutputStream(OutputStream out);
∥利用输出流out构造一个ZIP输出流。
public void setMethod(int method);
∥设置entry压缩方法,缺省值为DEFLATED。
public void putNextEntry(ZipEntry newe);
∥如果当前的entry存在且处于激活状态时,关闭它,在zip文件中写入新的entry-newe
并将数据流定位于entry数据项的起始位置,压缩方法为setMethod指定的方法。
·类ZipInputStream
ZipInputStream实现了zip压缩文件的读输入流,支持压缩和非压缩entry。下面是它的
几个函数:
public ZipInputStream(InputStream in);
∥利用输入流in构造一个ZIP输出流。
public ZipEntry getNextEntry();
∥返回ZIP文件中的下一个entry,并将输出流定位在此entry数据项的起始位置。
public void closeEntry();
∥关闭当前的zip entry,并将数据流定位于下一个entry的起始位置。
程序代码及其注释
下列的程序实现了数据文件zip方式的压缩和解压缩方法。randomData()函数随机生成
50个double数据,并放在doc字符串变量中;openFile()函数读取ZIP压缩文件;saveFile()函数
将随机生成的数据存到ZIP格式的压缩文件中。
import java.util.zip.*;
import java.awt.event.*;
import java.awt.*;
import java.lang.Math;
import java.io.*;
public class TestZip extends Frame implements ActionListener {
TextArea textarea; ∥显示数据文件的多行文本显示域
TextField infotip; ∥显示数据文件未压缩大小及压缩大小单行文本显示域
String doc; ∥存储随机生成的数据
long doczipsize = 0;∥压缩数据文件的大小
public TestZip(){
∥生成菜单
MenuBar menubar = new MenuBar();
setMenuBar(menubar);
Menu file = new Menu("File",true);
menubar.add(file);
MenuItem neww= new MenuItem("New");
neww.addActionListener(this);
file.add(neww);
MenuItem open=new MenuItem("Open");
open.addActionListener(this);
file.add(open);
MenuItem save=new MenuItem("Save");
save.addActionListener(this);
file.add(save);
MenuItem exit=new MenuItem("Exit");
exit.addActionListener(this);
file.add(exit);
∥随机生成的数据文件的多行文本显示域
add("Center",textarea = new TextArea());
∥提示文本原始大小、压缩大小的单行文本显示域
add("South",infotip = new TextField());
}
public static void main(String args){
TestZip ok=new TestZip();
ok.setTitle("zip sample");
ok.setSize(600,300);
ok.show();
}
private void randomData(){
∥随机生成50个double数据,并放在doc字符串变量中。
doc="";
for(int i=1;i《51;i++){
double rdm=Math.random()*10;
doc=doc+new Double(rdm).toString();
if(i%5 == 0) doc=doc+"n";
else doc=doc+" ";
}
doczipsize = 0;
showTextandInfo();
}
private void openFile(){
∥打开zip文件,将文件内容读入doc字符串变量中。
FileDialog dlg=new FileDialog(this,"Open",FileDialog.LOA D);
dlg.show();
String filename=dlg.getDirectory()+dlg.getFile();
try{
∥创建一个文件实例
File f=new File(filename);
if(!f.exists()) return; ∥文件不存在,则返回
∥用文件输入流构建ZIP压缩输入流
ZipInputStream zipis=new ZipInputStream(new FileInputStream(f));
zipis.getNextEntry();
∥将输入流定位在当前entry数据项位置
DataInputStream dis=new DataInputStream(zipis);
∥用ZIP输入流构建DataInputStream
doc=dis.readUTF();∥读取文件内容
dis.close();∥关闭文件
doczipsize = f.length();∥获取ZIP文件长度
showTextandInfo();∥显示数据
}
catch(IOException ioe){
System.out.println(ioe);
}
}
private void saveFile(){
∥打开zip文件,将doc字符串变量写入zip文件中。
FileDialog dlg=new FileDialog(this,"Save",FileDialog.SAVE);
dlg.show();
String filename=dlg.getDirectory()+dlg.getFile();
try{
∥创建一个文件实例
File f=new File(filename);
if(!f.exists()) return; ∥文件不存在,则返回
∥用文件输出流构建ZIP压缩输出流
ZipOutputStream zipos=new ZipOutputStream(new FileOutputStream(f));
zipos.setMethod(ZipOutputStream.DEFLATED); ∥设置压缩方法
zipos.putNextEntry(new ZipEntry("zip"));
∥生成一个ZIP entry,写入文件输出流中,并将输出流定位于entry起始处。
DataOutputStream os=new DataOutputStream(zipos);
∥用ZIP输出流构建DataOutputStream;
os.writeUTF(doc);∥将随机生成的数据写入文件中
os.close();∥关闭数据流
doczipsize = f.length();
∥获取压缩文件的长度
showTextandInfo();∥显示数据
}
catch(IOException ioe){
System.out.println(ioe);
}
}
private void showTextandInfo(){
∥显示数据文件和压缩信息
textarea.replaceRange(doc,0,textarea.getText().length());
infotip.setText("uncompressed size: "+doc.length()+"compressed size: "+dc zipsize);
}
public void actionPerformed(ActionEvent e){
String arg = e.getActionCommand();
if ("New".equals(arg)) randomData();
else if ("Open".equals(arg)) openFile();
else if ("Save".equals(arg)) saveFile();
else if ("Exit".equals(arg)){
dispose();∥关闭窗口
System.exit(0);∥关闭程序
}
else {
System.out.println("no this command!");
}
}
}
ZipOutputStream 中的putNextEntry和ZipInputStream中的getNextEntry方法是什么意思
不打开一个ZipEntry那么就会出现这个错误 : ZipOutputStream ZIP file must have at least one entry
这个ZipEntry的意思是Zip压缩包中的某个文件名字,当打开这个Entry时,就相当于往这个文件读取或者写入内容。
结束后用closeEtnry关闭该文件。
而GZIPInputStream则没有Entry这个概念,直接读写就行。
view plaincopy
ZipOutputStream zip = new ZipOutputStream (new FileOutputStream("./data.zip"));
DataOutputStream out = new DataOutputStream(zip);
zip.putNextEntry(new ZipEntry("1.txt"));
out.writeByte(’c’);
out.writeUTF("fafaafd");
zip.closeEntry();
out.close();
ZipInputStream zipin = new ZipInputStream( new FileInputStream("./data.zip"));
DataInputStream in = new DataInputStream(zipin);
zipin.getNextEntry();
zipin.
System.out.println( in.readByte() );
System.out.println( in .readUTF());
java zipOutputStream 对于closeEntry() 的问题
void close()
Closes the ZIP output stream as well as the stream being filtered.
void closeEntry()
Closes the current ZIP entry and positions the stream for writing
the next entry.
java中用ZipOutputStream进行压缩文件,如何让生成的压缩文件的ZipEnity为只读的
只读属性从属于文件系统的种类,比如NTFS、FAT、EXT3等的实现方法都不一样。
zip格式标准中,没有规定怎么去记录文件属性。就是说,即使设了属性,解码器也不强制需要遵守,不一定会还原成只读文件。
目前可还原只读属性的解压器都是遵守win/dos下的某种“潜规则”,把属性放在扩展区块extra
field中。Java可以用ZipEntry.setExtra设置这些扩展驱。
可以自己用压缩一个只读文件的zip,然后用ZipEntry.getExtra照抄分析出这种潜规则。
zipoutputstream 要添加什么dll
运行库组件
你可以在腾讯电脑管家的电脑诊断中找到软件问题,选择丢失VC++组件,点击立即修复。
或
在工具箱,打开电脑诊所,丢失.Dll 文件,进行一键修复
java ZipOutputStream 压缩包里面压缩多个文件(格式为zip文件)
在压缩包里运行文件都是制动解压到临时文件夹临时文件夹在C盘所以还是建议正常解压后再运行在有些情况下直接在压缩包里运行文件有些程序还未解压到临时文件夹所以就会报错手动解压在运行是最好的以,下是临时文件夹的路径
C:\Documents and Settings\Administrator\Local Settings\Temp
Java 中.ZipOutputStream 转成 ZipInputStream 文件流.!
FileInputStream in = new FileInputStream(new File("C:\\TestZip.zip")); // 读取文件内容
ZipInputStream zipInputStream = new ZipInputStream(in);
zipInputStream.getNextEntry(); //取得下一个entry
while ((b = zipInputStream.read()) != -1) { //读
System.out.println(b);
}
java怎样使用ZipOutputStream和ZipInputStream压缩和解压缩
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
public class MyZipUtil {
/**
* 设置缓冲值
*/
static final int BUFFER = 8192;
private static final String ALGORITHM = "PBEWithMD5AndDES";
public static void zip(String zipFileName, String inputFile,String pwd) throws Exception {
zip(zipFileName, new File(inputFile), pwd);
}
/**
* 功能描述:压缩指定路径下的所有文件
* @param zipFileName 压缩文件名(带有路径)
* @param inputFile 指定压缩文件夹
* @return
* @throws Exception
*/
public static void zip(String zipFileName, String inputFile) throws Exception {
zip(zipFileName, new File(inputFile), null);
}
/**
* 功能描述:压缩文件对象
* @param zipFileName 压缩文件名(带有路径)
* @param inputFile 文件对象
* @return
* @throws Exception
*/
public static void zip(String zipFileName, File inputFile,String pwd) throws Exception {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
zip(out, inputFile, "",pwd);
out.close();
}
/**
*
* @param out 压缩输出流对象
* @param file
* @param base
* @throws Exception
*/
public static void zip(ZipOutputStream outputStream, File file, String base,String pwd) throws Exception {
if (file.isDirectory()) {
File fl = file.listFiles();
outputStream.putNextEntry(new ZipEntry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i 《 fl.length; i++) {
zip(outputStream, fl.getName(), pwd);
}
}
else {
outputStream.putNextEntry(new ZipEntry(base));
FileInputStream inputStream = new FileInputStream(file);
//普通压缩文件
if(pwd == null || pwd.trim().equals("")){
int b;
while ((b = inputStream.read()) != -1){
outputStream.write(b);
}
inputStream.close();
}
//给压缩文件加密
else{
PBEKeySpec keySpec = new PBEKeySpec(pwd.toCharArray());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
SecretKey passwordKey = keyFactory.generateSecret(keySpec);
byte;
Random rnd = new Random();
rnd.nextBytes(salt);
int iterations = 100;
PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, iterations);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, passwordKey, parameterSpec);
outputStream.write(salt);
byte;
int bytesRead;
while ((bytesRead = inputStream.read(input)) != -1) {
byte output = cipher.update(input, 0, bytesRead);
if (output != null){
outputStream.write(output);
}
}
byte output = cipher.doFinal();
if (output != null){
outputStream.write(output);
}
inputStream.close();
outputStream.flush();
outputStream.close();
}
}
file.delete();
}
public static void unzip(String zipFileName, String outputDirectory)throws Exception {
ZipInputStream inputStream = new ZipInputStream(new FileInputStream(zipFileName));
unzip(inputStream, outputDirectory, null);
}
/**
* 功能描述:将压缩文件解压到指定的文件目录下
* @param zipFileName 压缩文件名称(带路径)
* @param outputDirectory 指定解压目录
* @return
* @throws Exception
*/
public static void unzip(String zipFileName, String outputDirectory, String pwd)throws Exception {
ZipInputStream inputStream = new ZipInputStream(new FileInputStream(zipFileName));
unzip(inputStream, outputDirectory, pwd);
}
public static void unzip(File zipFile, String outputDirectory, String pwd)throws Exception {
ZipInputStream inputStream = new ZipInputStream(new FileInputStream(zipFile));
unzip(inputStream, outputDirectory,pwd);
}
public static void unzip(ZipInputStream inputStream, String outputDirectory, String pwd) throws Exception{
ZipEntry zipEntry = null;
FileOutputStream outputStream = null;
try{
while ((zipEntry = inputStream.getNextEntry()) != null) {
if (zipEntry.isDirectory()) {
String name = zipEntry.getName();
name = name.substring(0, name.length() - 1);
File file = new File(outputDirectory + File.separator + name);
file.mkdir();
}
else {
File file = new File(outputDirectory + File.separator + zipEntry.getName());
file.createNewFile();
outputStream = new FileOutputStream(file);
//普通解压缩文件
if(pwd == null || pwd.trim().equals("")){
int b;
while ((b = inputStream.read()) != -1){
outputStream.write(b);
}
outputStream.close();
}
//解压缩加密文件
else{
PBEKeySpec keySpec = new PBEKeySpec(pwd.toCharArray());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
SecretKey passwordKey = keyFactory.generateSecret(keySpec);
byte;
inputStream.read(salt);
int iterations = 100;
PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, iterations);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, passwordKey, parameterSpec);
byte;
int bytesRead;
while ((bytesRead = inputStream.read(input)) != -1) {
byte output = cipher.update(input, 0, bytesRead);
if (output != null){
outputStream.write(output);
}
}
byte output = cipher.doFinal();
if (output != null){
outputStream.write(output);
}
outputStream.flush();
outputStream.close();
}
}
}
inputStream.close();
}
catch(IOException ex){
throw new Exception("解压读取文件失败");
}
catch(Exception ex){
throw new Exception("解压文件密码不正确");
}
finally{
inputStream.close();
outputStream.flush();
outputStream.close();
}
}
public static void main(String args) {
try {
zip("D:\\SHYJ\\Email\\OUT\\webapps\\test.zip", "D:\\SHYJ\\Email\\OUT\\webapps\\export");
System.out.println("success");
}
catch (Exception e) {
e.printStackTrace(System.out);
}
}
}

更多文章:
在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)
2026年10月11日 05:20
countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)
2026年10月11日 03:30
正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)
2026年10月11日 03:00
orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)
2026年10月10日 23:00
display的用法(display是什么意思 详解display的含义和用法)
2026年10月10日 22:00
html全部居中代码(怎么让网页居中显示,html如何让网页居中)
2026年10月10日 21:10




