在学习JAVA做WEB,开始学习,没有使用框架。
在学习过程中,想根据根据模板动态生成word。然后供用户下载。
先把原始WORD保存为XML格式,然后读取,并生成。
网上搜了一个函数读取文件转成string。然后可以再替换String 里的东西,就是新的临时文件。但是不知道这样会不会占用很多内存,什么时候释放内存也不是太清楚,如果有知道的请告知一下。
public static String file2String(File f, String charset) {
String result = null;
try {
result = stream2String(new FileInputStream(f), charset);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return result;
}
public static String stream2String(InputStream in, String charset) {
StringBuffer sb = new StringBuffer();
try {
Reader r = new InputStreamReader(in, charset);
int length = 0;
for (char[] c = new char[1024]; (length = r.read(c)) != -1;) {
sb.append(c, 0, length);
}
r.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
File file = new File(request.getSession().getServletContext().getRealPath("/statics/doc/test.xml"));
String s = file2String(file, "utf-8");
s=s.replace("${name}", "张三");
byte [] buffer = s.getBytes("utf-8");//
response.reset();
response.addHeader("Content-Disposition", "attachment;filename=test.xml" );
response.addHeader("Content-Length", "" + file.length());
OutputStream ous = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
ous.write(buffer);
ous.flush();
ous.close();