首页 新闻 会员 周边 捐助

怎么提高文件的写入速度,求大神

0
悬赏园豆:5 [已解决问题] 解决于 2016-09-21 11:19

现在写一个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;
}

}

左手鼠标右手菜刀的主页 左手鼠标右手菜刀 | 初学一级 | 园豆:197
提问于:2016-09-20 17:19
< >
分享
最佳答案
0

string s=buffer.toString();//能否在这步直接执行substring???

bos.write(s.substring(0, s.length()-1));

StringBuffer buffer = new StringBuffer();

buffer = null;//能否直接清空而不需要每次都NEW个对象

JAVA编译器很烂的。。优化能力堪忧,尽量注意细节

收获园豆:5
56180825 | 小虾三级 |园豆:1749 | 2016-09-20 18:58
其他回答(3)
1

你是用2.5寸软盘吧?100M文件怎么也不需要4,5分钟呀!

XiaoFaye | 园豆:3087 (老鸟四级) | 2016-09-20 17:30
0

你把你那几个substring去掉吧,那个要命的。

Daniel Cai | 园豆:10424 (专家六级) | 2016-09-20 17:39
1

buffer.append("\"" + s + "\",");

 

bos.write(buffer.toString().substring(0, buffer.toString().length()-1));

 

这两个都是槽点。。。

之奇一昂 | 园豆:1421 (小虾三级) | 2016-09-20 17:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册