/***********************************************************************
*
*@data: 2011-03-05
*
************************************************************************/
struts2中實現
一、讀取zip文件流並解壓讀取文件內容:
this.request = ServletActionContext.getRequest();
this.response = ServletActionContext.getResponse();
System.out.println("==== begin ====");
BufferedReader br = null;
ServletInputStream is = null;
BufferedInputStream bis = null;
ZipInputStream zis = null;
try {
StringBuffer sbContent = new StringBuffer();
is = request.getInputStream();
bis = new BufferedInputStream(is, 2048);
zis = new ZipInputStream(bis);
ZipEntry ze = null;
while ((ze = zis.getNextEntry()) != null) {
long size = ze.getSize();
if (size > 0) {
String line;
br = new BufferedReader(new InputStreamReader(zis, "UTF-8"));
while ((line = br.readLine()) != null) {
sbContent.append(line);
}
}
}
System.out.println(sbContent.toString());
PrintWriter out = this.response.getWriter();
out.write(sbContent.toString());
out.write(new String("數據讀取成功!".getBytes(),"UTF-8"));
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(null!=br)
br.close();
zis.close();
bis.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("=== end === ");
return null;
二、下砸壓縮文件流(將字符串寫入xml中,再壓縮後提供下載):
@SuppressWarnings("deprecation")
public String GetDelphiFile() {
this.request = ServletActionContext.getRequest();
this.response = ServletActionContext.getResponse();
return SUCCESS;
}
final int BUFFER = 1024;
public InputStream getInputStream() {
String FILENAME = "gdzc";
InputStream is=null;
Document document = DocumentHelper.createDocument();
Element element = document.addElement("root");
Element el = element.addElement("record");
el.addAttribute("id", "1");
el.addAttribute("name", new String("筆記本電腦"));
Element record2 = element.addElement("record");
record2.addAttribute("id", "2");
record2.addAttribute("name", "辦公桌");
try {
byte[] b = document.asXML().getBytes();
int count;
String url =this.request.getRealPath("");
//創建xml文件File gdzc = File.createTempFile("gdzc", ".xml");
url = url.substring(0,url.lastIndexOf("//"));
String filepath =url.substring(0,url.lastIndexOf("//"));
File gdzc = new File(filepath+"//temp//"+FILENAME+".xml"); //此臨時文件保存路徑爲服務器tomcat的安裝目錄下temp 文件夾中
if(!gdzc.exists()){
gdzc.createNewFile();
}
FileOutputStream fosgdzc = new FileOutputStream(gdzc);
for (int i = 0; i < b.length; i++) {
fosgdzc.write(b[i]);//將文本內容寫入xml中
}
fosgdzc.close();
//創建壓縮文件
File zip = File.createTempFile(FILENAME,".zip");
FileOutputStream fos = new FileOutputStream(zip);
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
fos));
//創建壓縮包內文件
ZipEntry zEntry = new ZipEntry(gdzc.getName());
out.putNextEntry(zEntry);
FileInputStream fis = new FileInputStream(gdzc);
BufferedInputStream bis = new BufferedInputStream(fis, BUFFER);
b = new byte[BUFFER];
while ((count = bis.read(b, 0, BUFFER)) != -1) {
out.write(b,0,count); //將gdzc.xml寫入壓縮包中
}
is = new FileInputStream(zip);
bis.close();
fis.close();
out.close();
//將zip包寫入 inputstream 中
ServletOutputStream sos = this.response.getOutputStream();
b= new byte[BUFFER];
while((count=is.read(b, 0, BUFFER))!=-1){
sos.write(b,0,BUFFER);
}
sos.close();
//刪除臨時文件
if(gdzc.exists()){
gdzc.delete();
}
if(zip.exists()){
zip.delete();
}
this.response.flushBuffer();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return is;
}