项目中有这个需求:将查询出来的数据通过浏览器可以下载成csv文件。这里给出了两种做法,一、将数据写入到本地csv文件二、通过浏览器可以下载生成的csv文件。
开始我们的实验:
第一步、新建对象类:Person.java
package com.figo.onlinemarket.web.model;
/**
* @author zhuzhifei
*
*/
public class Person {
String name;
String age;
public StringgetName() {
return name;
}
public voidsetName(String name) {
this.name =name;
}
public String getAge(){
return age;
}
public voidsetAge(String age) {
this.age =age;
}
}
第二步、实现数据写入到csv文件或者下载
1、 写入csv文件
packagecom.figo.onlinemarket.test;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.UnsupportedEncodingException;
importjava.util.ArrayList;
importjava.util.List;
/**
* @author zhuzhifei
*
*/
publicclass Test {
public static void main(String[] args) {
try {
System.out.print(fullFileName);
exportCsv();
} catch (Exception e) {
// TODO Auto-generated catchblock
e.printStackTrace();
}
// equalTest();
}
private static void exportCsv() {
FileWriter f = null;
try {
f = newFileWriter("E:\\test.csv");
List<Person>personList = new ArrayList<Person>();
Person person1 = newPerson();
person1.setAge("17");
person1.setName("a");
Person person2 = newPerson();
person2.setAge("17");
person2.setName("a");
Person person3 = newPerson();
person3.setAge("17");
person3.setName("a");
Person person4 = newPerson();
person4.setAge("17");
person4.setName("a");
personList.add(person1);
personList.add(person2);
personList.add(person3);
personList.add(person4);
for (Person person :personList) {
f.write(person.getName());
f.write(",");
f.write(person.getAge());
f.write("\n");
f.flush();
}
f.close();
} catch (IOException e) {
// TODO Auto-generated catchblock
e.printStackTrace();
}
}
}
2、 通过浏览器导出csv文件
package com.figo.onlinemarket.web.action;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import com.figo.onlinemarket.web.model.Person;
@Controller
public class ExportAction {
@RequestMapping(value = "/file/exportFile.htm")
public void exportFile(HttpServletRequest request,
HttpServletResponse response, ModelMap model) {
OutputStream o = null;
try {
List<com.figo.onlinemarket.web.model.Person>personList = new ArrayList<Person>();
com.figo.onlinemarket.web.model.Person person1 = new Person();
person1.setAge("17");
person1.setName("a");
Person person2 = new Person();
person2.setAge("18");
person2.setName("a");
Person person3 = new Person();
person3.setAge("19");
person3.setName("a");
Person person4 = new Person();
person4.setAge("20");
person4.setName("a");
personList.add(person1);
personList.add(person2);
personList.add(person3);
personList.add(person4);
String exportString = "客户姓名,年龄";
exportString += "\n";
if (personList.size() > 0) {
for (int i = 0; i < personList.size(); i++) {
Person person = personList.get(i);
exportString += person.getName() + ",";
exportString += person.getAge();
exportString += "\n";
}
response.setContentType("application/download;charset=GBK");
response.setContentType("Content-type:application/vnd.ms-excel;charset=GBK");
response.setHeader("Content-disposition",
"attachment;filename=\"" + new Date() + ".csv\"");
o = response.getOutputStream();
o.write(exportString.toString().getBytes("GBK"));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (o != null) {
try {
o.close();
} catch (IOException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
}
}
}
}
第三步、总结
实验中我们可以看到还是io相关的类在起作用,写入数据呢,就通过FileWriter,fileWriter.flush()方法,导出呢,则使用OutputStream的outputStream.write()方法。Io包下面的类我们需要熟练掌握。