解决压缩包中带文件路径的问题

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

今天用java.util.zip做文件压缩.写完程序后发现压缩包里带进了原文件的所有路径目录

/**

* 生成zip文件

* 返回zip文件地址

* @param imgids String[]

* @return String

*/

public String createZip(String[] imgids){

String[] filenames=getPath(imgids);//根据图片id返回路径

Date date=new Date();

byte[] buf=new byte[1024];

String outFilename=zippath+String.valueOf(date.getTime())+".zip";

try {

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename));

for(int i=0;i<filenames.length;i++){

FileInputStream in=new FileInputStream(filenames[i]);

ZipEntry zipEntity=new ZipEntry(filenames[i]); //添加文件到压缩实体里

out.putNextEntry(zipEntity);

int len;

while((len=in.read(buf))>0){

out.write(buf,0,len);

}

out.closeEntry();

in.close();

}

out.close();

}

catch (IOException ex) {

ex.printStackTrace();

}

return outFilename;

}

其实问题出现在 ZipEntry zipEntity=new ZipEntry(filenames[i]); 我println这个filename[i]后发现这里是带了全路径的一个文件名.

解决方法

public String createZip(String[] imgids){

String[] filenames=getPath(imgids);

Date date=new Date();

byte[] buf=new byte[1024];

String outFilename=zippath+String.valueOf(date.getTime())+".zip";

try {

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename));

for(int i=0;i<filenames.length;i++){

FileInputStream in=new FileInputStream(filenames[i]);

File file=new File(filenames[i]);

String filename=file.getName();//取得图片文件名

ZipEntry zipEntity=new ZipEntry(filename);//这里改成文件名就可以了

out.putNextEntry(zipEntity);

int len;

while((len=in.read(buf))>0){

out.write(buf,0,len);

}

out.closeEntry();

in.close();

}

out.close();

}

catch (IOException ex) {

ex.printStackTrace();

}

return outFilename;

}

一些细节的地方平时没怎么注意.导致在这么简单的问题上耗费了时间.该打该打

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航