1
我想構建一個解析表單輸入並從它們創建一個.csv文件的servlet,但是bufferedWriter對象因爲沒有(對我來說)截斷很多字符的原因。Java Servlet寫入CSV格式的輸入
String filepath = getServletContext().getRealPath("\\") + "temp";
String filename = "csv"+dateFormat.format(date)+".csv";
File file = new File(filepath + filename);
file.createNewFile();
BufferedWriter fwrite = new BufferedWriter(new FileWriter(file));
for(int i=0; i<list.size(); i++) {
String[] dataEntry = list.get(i);
for (int j=0; j<dataEntry.length;j++)
fwrite.write("test1-2");
//fwrite.append(dataEntry[j]+";");
fwrite.newLine();
}
fwrite.close();
URI fileUri = file.toURI();
stream = response.getOutputStream();
response.setContentType("text/csv");
response.addHeader("Content-Disposition", "attachment; filename="
+ filename);
URLConnection urlConn = fileUri.toURL().openConnection();
response.setContentLength((int) urlConn.getContentLength());
buf = new BufferedInputStream(urlConn.getInputStream());
while (buf.read() != -1)
stream.write(buf.read());
} finally {
if (stream != null)
stream.close();
if (buf != null)
buf.close();
}
}
對不起,如果代碼是有點slapdash。我寫的每一個條目的「test1-2」字符串時,電流輸出爲
等-ts12et-ts12et-ts12ÿ
代碼本身任何進一步的評論,將不勝感激,我只是嘗試與我在網上找到的東西,我沒有實際的最佳做法的參考點。
該文件從servlet發送到客戶端。我曾嘗試用leafpad,openOffice或Gnumeric打開它,每次都得到相同的結果。編碼問題在應用程序中非常重要,所以它確保輸入採用UTF-8格式,參數以UTF-8解析。但測試文本應該排除這一點(或者我認爲?) – 2012-02-20 18:01:59
所以你說這是接收不正確字符編碼的CSV文本的客戶端,而不是文件('文件')被錯誤地保存?在這種情況下,您應該設置輸出的字符編碼。 'response.setContentType(「text/csv; charset = UTF-8」)'。 – 2012-02-20 18:06:19
我不知道什麼改變了,但我組織的代碼,它實際上工作。 – 2012-02-21 10:28:32