一 struts.xml文件的编辑
<struts>
<package name="crud-default" extends="convention-default">
<action name="download" class="com.myweb.download.DownLoadAction">
<!--type 为 stream 应用 StreamResult 处理-->
<result name="success" type="stream">
<!--默认为 text/plain-->
<param name="contentType">application/x-msdownload;charset=ISO8859-1</param>
<!-- 默认就是 inputStream,它将会指示 StreamResult 通过 inputName 属性值的 getter 方法,
比如这里就是 getInputStream() 来获取下载文件的内容,意味着你的 Action 要有这个方法 -->
<param name="inputName">inputStream</param>
<!-- 默认为 inline(在线打开),设置为 attachment 将会告诉浏览器下载该文件,filename
指定下载文件时的文件名,若未指定将会是以浏览的页面名作为文件名,如以 download.action 作为文件名 -->
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<!-- 输出时缓冲区的大小 -->
<param name="bufferSize">4096</param>
</result>
</action>
</package>
</struts>
package com.used.struts2.action;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import com.used.struts2.bean.UserBean;
import com.used.struts2.utils.ConfigMessages;
import com.used.struts2.utils.CreaterCSV;
public class DownLoadAction extends ActionSupport {
private static final long serialVersionUID = 2013455583651749435L;
private final static String DOWNLOADFILEPATH=ConfigMessages.getString("reportServerDir");
private String filename;
private List<UserBean> UserBeanList;
public String reportCSV(){
UserBeanList = getUserList();
List<UserBean> list = new ArrayList<UserBean>();
for (int i = 0; i < UserBeanList.size(); i++) {
UserBean job = new UserBean();
job.setUserId(UserBeanList.get(i).getUserId());
job.setUserName(UserBeanList.get(i).getUserName());
job.setTel(UserBeanList.get(i).getTel());
list.add(job);
}
try {
filename = ConfigMessages.getString("reportOmnitureFileName");
CreaterCSV.CreateCsvfiles(ConfigMessages.getString("reportServerDir"), filename, UserBean.getList(), list);
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
//封装list
public List<UserBean> getUserList(){
List<UserBean> userList = new ArrayList<UserBean>();
for(int i=0;i<5;i++){
UserBean ub = new UserBean();
ub.setUserId("001"+i);
ub.setUserName("ADMIN_"+i);
ub.setTel(123+i);
userList.add(ub);
}
return userList;
}
//从下载文件原始存放路径读取得到文件输出流
public InputStream getDownloadFile() {
InputStream is = null;
try {
is = new FileInputStream(DOWNLOADFILEPATH+filename+".csv");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return is;
}
//如果下载文件名为中文,进行字符编码转换
public String getDownloadChineseFileName() {
String downloadChineseFileName = filename;
try {
downloadChineseFileName = new String(downloadChineseFileName.getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return downloadChineseFileName+".csv";
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public static String getDownloadfilepath() {
return DOWNLOADFILEPATH;
}
}
package com.used.struts2.utils;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
/**
* 读取配置文件
* @author ADMIN
*
*/
public class ConfigMessages {
private static final String BUNDLE_NAME = "configures";
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
private ConfigMessages() {
}
public static String getString(String key) {
try {
return RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
System.out.println("get properties file error!");
return null;
}
}
}
reportServerDir= E\:/workspace/apache-tomcat-6.0.20/webapps/USED_Project/report/