FileInputStream是按字節(jié)讀取文件的
創(chuàng)新互聯(lián)長(zhǎng)期為超過千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為資源企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),資源網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
按行讀取的話,用BufferedReader
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("ss.csv"));
String str = "";
while (null != (str = br.readLine())) {
System.out.println(str);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (br!= null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
用的相對(duì)路徑,ss.csv和類放在一個(gè)文件夾里了
我來說一下大致的實(shí)現(xiàn)步驟,具體實(shí)現(xiàn)需要你自己去寫了
1.檢索數(shù)據(jù),檢索到的數(shù)據(jù)假定為一個(gè)list
2.你需要自己寫一個(gè)objectToString之類的方法來把檢索到的數(shù)據(jù)轉(zhuǎn)化為一個(gè)String或StringBuffer,就是往各字段間插",",往個(gè)記錄間插"\r\n",如此這類的轉(zhuǎn)換,假定轉(zhuǎn)換好的字符串為strResult.
3.然后用下面的代碼寫在后臺(tái)來控制下載,文件名那里你可以把時(shí)間格式控制好,或者用前臺(tái)傳過來的參數(shù)做名字。
response.setContentType("application/download;charset=UTF-8");
response.setHeader("Content-disposition","attachment;filename=\"" +new Date()+".csv\"");
解釋:csv文件實(shí)際上就是字符串,之間用“,”進(jìn)行分割,之后進(jìn)行的存儲(chǔ)。
工具類如下:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.List;
/**
*
* CSV文件導(dǎo)出工具類
*/
public class CSVUtils {
/**
* CSV文件生成方法
* @param head
* @param dataList
* @param outPutPath
* @param filename
* @return
*/
public static File createCSVFile(List head, ListList dataList,
String outPutPath, String filename) {
File csvFile = null;
BufferedWriter csvWtriter = null;
try {
csvFile = new File(outPutPath + File.separator + filename + ".csv");
File parent = csvFile.getParentFile();
if (parent != null !parent.exists()) {
parent.mkdirs();
}
csvFile.createNewFile();
// GB2312使正確讀取分隔符","
csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(
csvFile), "GB2312"), 1024);
// 寫入文件頭部
writeRow(head, csvWtriter);
// 寫入文件內(nèi)容
for (List row : dataList) {
writeRow(row, csvWtriter);
}
csvWtriter.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
csvWtriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return csvFile;
}
/**
* 寫一行數(shù)據(jù)方法
* @param row
* @param csvWriter
* @throws IOException
*/
private static void writeRow(List row, BufferedWriter csvWriter) throws IOException {
// 寫入文件頭部
for (Object data : row) {
StringBuffer sb = new StringBuffer();
String rowStr = sb.append("\"").append(data).append("\",").toString();
csvWriter.write(rowStr);
}
csvWriter.newLine();
}
}
Object-Z