现在写一个100M的文件大概要4~5分钟
因为经常要写超过100万的数据,所以这速度略显不足,求大神看看,哪里还能优化,多线程的就先别说了,这个就是多线程中的一个线程
* @author liuhongtian
*
*/
public class ResultFileTools {
private static Logger log = Logger.getLogger(ResultFileTools.class);
/**
* 根据查询结果集生成结果文件内容
*
* @param rs
* 查询结果集
* @param fileFullName
* 结果文件名称(含路径)
* @param columnNames
* 查询字段名称
* @param properties
* 查询属性
* @return 成功或失败
*/
public static boolean writeFile(ResultSet rs, String fileFullName, String[] columnNames, String[] propertys) {
Handler baseHandler = new BaseHandler();
Handler calcHandler = new CalcHandler(baseHandler);
Handler specialHandler = new SpecialHandler(calcHandler);
File file = new File(fileFullName);
// 创建文件
try (BufferedWriter bos = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "gbk"));) {
// file.createNewFile();
// 写入文件头
StringBuffer hBuffer = new StringBuffer();
for (String string : columnNames) {
hBuffer.append("\"" + string + "\",");
}
String cols = hBuffer.toString().substring(0, hBuffer.toString().length() - 1);
bos.write(cols);
bos.newLine();
bos.flush();
// 写入查询结果记录
try {
int i = 0 ;
while (rs.next()) {
StringBuffer buffer = new StringBuffer();
if(i!=0){
buffer.append("\n");
}
for (String property : propertys) {
String s = specialHandler.toHandle(property, rs);
buffer.append("\"" + s + "\",");
}
bos.write(buffer.toString().substring(0, buffer.toString().length()-1));
buffer = null;
i++;
}
} catch (SQLException e) {
log.error("result set process faild!", e);
return false;
} catch (IOException e) {
log.error("record write faild!", e);
return false;
}
} catch (IOException e1) {
log.error("open file faild!", e1);
return false;
}
return true;
}
}
string s=buffer.toString();//能否在这步直接执行substring???
bos.write(s.substring(0, s.length()-1));
StringBuffer buffer = new StringBuffer();
buffer = null;//能否直接清空而不需要每次都NEW个对象
JAVA编译器很烂的。。优化能力堪忧,尽量注意细节
你是用2.5寸软盘吧?100M文件怎么也不需要4,5分钟呀!
你把你那几个substring去掉吧,那个要命的。
buffer.append("\"" + s + "\",");
bos.write(buffer.toString().substring(0, buffer.toString().length()-1));
这两个都是槽点。。。