• 生成.txt文件
  • 生成.csv文件
  • 生成.xls文件
  1. import java.io.BufferedWriter;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.OutputStreamWriter;
  6. import java.io.PrintWriter;
  7. import java.text.NumberFormat;
  8. import java.text.SimpleDateFormat;
  9. import java.util.Date;
  10. import java.util.Iterator;
  11. import java.util.List;
  12.  
  13. import org.apache.poi.xssf.usermodel.XSSFCell;
  14. import org.apache.poi.xssf.usermodel.XSSFRow;
  15. import org.apache.poi.xssf.usermodel.XSSFSheet;
  16. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  17.  
  18. public class CreateFileUtil {
  19.  
  20. /**
  21. * 生成.TXT格式文件,行数几乎无上限
  22. */
  23. public static boolean createTxtFile(List<Object[]> rows, String filePath, String fileName) {
  24. // 标记文件生成是否成功
  25. boolean flag = true;
  26.  
  27. try {
  28. // 含文件名的全路径
  29. String fullPath = filePath + File.separator + fileName + ".txt";
  30.  
  31. File file = new File(fullPath);
  32. if (file.exists()) { // 如果已存在,删除旧文件
  33. file.delete();
  34. }
  35. file = new File(fullPath);
  36. file.createNewFile();
  37.  
  38. // 格式化浮点数据
  39. NumberFormat formatter = NumberFormat.getNumberInstance();
  40. formatter.setMaximumFractionDigits(10); // 设置最大小数位为10
  41.  
  42. // 格式化日期数据
  43. SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  44.  
  45. // 遍历输出每行
  46. PrintWriter pfp = new PrintWriter(file, "UTF-8"); //设置输出文件的编码为utf-8
  47. for (Object[] rowData : rows) {
  48. StringBuffer thisLine = new StringBuffer("");
  49. for (int i = 0; i < rowData.length; i++) {
  50. Object obj = rowData[i]; // 当前字段
  51.  
  52. // 格式化数据
  53. String field = "";
  54. if (null != obj) {
  55. if (obj.getClass() == String.class) { // 如果是字符串
  56. field = (String) obj;
  57. } else if (obj.getClass() == Double.class || obj.getClass() == Float.class) { // 如果是浮点型
  58. field = formatter.format(obj); // 格式化浮点数,使浮点数不以科学计数法输出
  59. } else if (obj.getClass() == Integer.class || obj.getClass() == Long.class
  60. || obj.getClass() == Short.class || obj.getClass() == Byte.class) { // 如果是整形
  61. field += obj;
  62. } else if (obj.getClass() == Date.class) { // 如果是日期类型
  63. field = sdf.format(obj);
  64. }
  65. } else {
  66. field = " "; // null时给一个空格占位
  67. }
  68.  
  69. // 拼接所有字段为一行数据,用tab键分隔
  70. if (i < rowData.length - 1) { // 不是最后一个元素
  71. thisLine.append(field).append("\t");
  72. } else { // 是最后一个元素
  73. thisLine.append(field);
  74. }
  75. }
  76. pfp.print(thisLine.toString() + "\n");
  77. }
  78. pfp.close();
  79.  
  80. } catch (Exception e) {
  81. flag = false;
  82. e.printStackTrace();
  83. }
  84. return flag;
  85. }
  86.  
  87. /**
  88. * 生成.csv格式文件,行数几乎无上限
  89. */
  90. public static boolean createCsvFile(List<Object[]> rows, String filePath, String fileName) {
  91. // 标记文件生成是否成功
  92. boolean flag = true;
  93.  
  94. // 文件输出流
  95. BufferedWriter fileOutputStream = null;
  96.  
  97. try {
  98. // 含文件名的全路径
  99. String fullPath = filePath + File.separator + fileName + ".csv";
  100.  
  101. File file = new File(fullPath);
  102. if (!file.getParentFile().exists()) { // 如果父目录不存在,创建父目录
  103. file.getParentFile().mkdirs();
  104. }
  105. if (file.exists()) { // 如果已存在,删除旧文件
  106. file.delete();
  107. }
  108. file = new File(fullPath);
  109. file.createNewFile();
  110.  
  111. // 格式化浮点数据
  112. NumberFormat formatter = NumberFormat.getNumberInstance();
  113. formatter.setMaximumFractionDigits(10); // 设置最大小数位为10
  114.  
  115. // 格式化日期数据
  116. SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  117.  
  118. // 实例化文件输出流
  119. fileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "GB2312"), 1024);
  120.  
  121. // 遍历输出每行
  122. Iterator<Object[]> ite = rows.iterator();
  123. while (ite.hasNext()) {
  124. Object[] rowData = (Object[]) ite.next();
  125. for (int i = 0; i < rowData.length; i++) {
  126. Object obj = rowData[i]; // 当前字段
  127. // 格式化数据
  128. String field = "";
  129. if (null != obj) {
  130. if (obj.getClass() == String.class) { // 如果是字符串
  131. field = (String) obj;
  132. } else if (obj.getClass() == Double.class || obj.getClass() == Float.class) { // 如果是浮点型
  133. field = formatter.format(obj); // 格式化浮点数,使浮点数不以科学计数法输出
  134. } else if (obj.getClass() == Integer.class || obj.getClass() == Long.class
  135. || obj.getClass() == Short.class || obj.getClass() == Byte.class) { // 如果是整形
  136. field += obj;
  137. } else if (obj.getClass() == Date.class) { // 如果是日期类型
  138. field = sdf.format(obj);
  139. }
  140. } else {
  141. field = " "; // null时给一个空格占位
  142. }
  143. // 拼接所有字段为一行数据
  144. if (i < rowData.length - 1) { // 不是最后一个元素
  145. fileOutputStream.write("\"" + field + "\"" + ",");
  146. } else { // 是最后一个元素
  147. fileOutputStream.write("\"" + field + "\"");
  148. }
  149. }
  150. // 创建一个新行
  151. if (ite.hasNext()) {
  152. fileOutputStream.newLine();
  153. }
  154. }
  155. fileOutputStream.flush();
  156. } catch (Exception e) {
  157. flag = false;
  158. e.printStackTrace();
  159. } finally {
  160. try {
  161. fileOutputStream.close();
  162. } catch (IOException e) {
  163. e.printStackTrace();
  164. }
  165. }
  166. return flag;
  167. }
  168.  
  169. /**
  170. * 生成.xls格式文件,单页上限: 03版是65536行 ,07版的是1048576行, 10版不知
  171. */
  172. public static boolean createXlsFile(List<Object[]> rows, String filePath, String fileName) {
  173. // 标记文件生成是否成功
  174. boolean flag = true;
  175.  
  176. try {
  177. // 创建一个webbook,对应一个Excel文件
  178. XSSFWorkbook wb = new XSSFWorkbook();
  179.  
  180. // 在webbook中添加一个sheet,对应Excel文件中的sheet
  181. XSSFSheet sheet = wb.createSheet(fileName);
  182.  
  183. // 遍历输出每行
  184. for (int i = 0; i < rows.size(); i++) {
  185. Object[] rowData = rows.get(i); // 每一行的数据
  186. XSSFRow row = sheet.createRow(i);
  187. for (int j = 0; j < rowData.length; j++) {
  188. XSSFCell cell = row.createCell(j);
  189. // 假设只有三种类型的数据
  190. if (rowData[j].getClass() == String.class) { // String类型数值
  191. cell.setCellValue((String) rowData[j]);
  192. } else if (rowData[j].getClass() == double.class) { // double类型数值
  193. cell.setCellValue((Double) rowData[j]);
  194. } else if (rowData[j].getClass() == int.class) { // int类型数值
  195. cell.setCellValue((Integer) rowData[j]);
  196. }
  197. }
  198. }
  199.  
  200. String fullPath = filePath + File.separator + fileName + ".xls";// 含文件名的全路径
  1. File file = new File(fullPath);
  2. if (!file.getParentFile().exists()) { // 如果父目录不存在,创建父目录
  3. file.getParentFile().mkdirs();
  4. }
  5. if (file.exists()) { // 如果已存在,删除旧文件
  6. file.delete();
  7. }
  8. file = new File(fullPath);
  9. file.createNewFile();
  1. FileOutputStream fileOut = new FileOutputStream(file); // 写出数据到文件
  2. wb.write(fileOut);
  3. fileOut.close();
  4. } catch (Exception e) {
  5. flag = false;
  6. e.printStackTrace();
  7. }
  8.  
  9. return flag;
  10. }
  11.  
  12. }

java实现写大量数据到文件中的更多相关文章

  1. MySQL导出数据到文件中的方法

    MySQL导出数据到文件中的方法 1.导出数据到txt文件中实例:把数据表studscoreinfo中所有数据导出到指定的位置方法:select * from 表名 into outfile 指定导出 ...

  2. java poi 写入大量数据到excel中

    最近在利用poi往excel中写入大量数据时,发现excel2003最多只支持65535条,大量数据时容易造成oom,上网查了一下api,发现目前对于2003,每个sheet最多支持65535条,若数 ...

  3. java对象序列化并存储到文件中

    ● 如何将一个Java对象序列化到文件里 使用输入输出流,,一个是ObjectOutputStream 对象,ObjectOutputStream 负责向指定的流中写入序列化的对象.当从文件中读取序列 ...

  4. Java Slf4j日志配置输出到文件中

    1.概述 新项目需要增加日志需求,所以网上找了下日志配置,需求是将日志保存到指定文件中.网上找了下文章,发现没有特别完整的文章,下面自己整理下. 1.Java日志概述 对于一个应用程序来说日志记录是必 ...

  5. awk 统计数据在文件中的出现次数

    突然发现awk原来可以统计同一数据在要处理的文件中所出现的次数.原来的时候为了分析数据还自己写程序,哎,无语,当时还以为自己多强,手工分析不过来的东西写程序处理.现在想来实在是年少轻狂.解决问题嘛,不 ...

  6. Java导出List集合到txt文件中——(四)

    有时候,需要将数据以一定格式导出到txt文件中.利用Java的IO可以轻松的导出数据到txt中. package Action.txt; import java.io.BufferedWriter; ...

  7. windows 批处理把所有java源码导入一个txt文件中

    首先在src下搜*.java,把搜到的文件全拷出来放在allsrc目录下, 然后在allsrc目录下建个run.bat,键入以下内容for %%i in (*.java)  do type %%i&g ...

  8. mysql导出指定字段或指定数据到文件中

    使用mysqldump把mysql数据库的数据导出到文件中还是挺方便的:比如说要导出baijunyao数据库: // mysqldump -u用户名 -p 数据库名 [表名]> 导出的文件名 m ...

  9. SSM框架中写sql在xml文件中

    第一种(用Mapper.xml映射文件中定义了操作数据库sql) 注意点: 1.#{}与${} #{}表示一个占位符,使用占位符可以防止sql注入, ${}通过${}可以将parameterType传 ...

随机推荐

  1. SPRING+JNDI+C3P0 in tomcat6

    Tomcat 中Jndi是使用Tomcat自带的连接池,由于客户要求,抛弃Tomcat自带的连接池.使用c3p0 .经过几个小时调试,解决方案如下: 环境:Tomcat 6 下面来看Jndi 与 c3 ...

  2. codeforces 166C Median - from lanshui_Yang

    C. Median time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...

  3. OpenStack中给wsgi程序写单元測试的方法

    在 OpenStack 中, 针对web应用, 有三种方法来写单元測试 1) 使用webob生成模拟的request from __future__ import print_function imp ...

  4. [Immutable.js] Exploring Sequences and Range() in Immutable.js

    Understanding Immutable.js's Map() and List() structures will likely take you as far as you want to ...

  5. 初学jquery遇见的两个小问题!

    <body>    <div id="divtest">div的内容</div>    <div id="default&quo ...

  6. HTML - Textarea - 空格的问题解决方式

    第一种方式: <textarea name="textareaname" rows="XX" cols="XX" ></t ...

  7. bzoj 2049 Cave 洞穴勘测(LCT)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 动态树入门题,不需要维护任何信息. 我用的是splay,下标实现的lct. #in ...

  8. C++ Primer Chapter 1

    When I start reviewing, I thought Chapter is useless. Because the title is "Getting Start" ...

  9. python Post方式发起http请求 使用百度接口地理编码

    import os import httplib import json import urllib baiduapi="api.map.baidu.com:80" src=&qu ...

  10. 【3】python核心编程 第五章-数字

    1.用大写字母 “L”表示长整数 尽管 Python 也支持用小写字母 L 标记的长整型,但是我们郑重推荐您仅使用大写的 “L”, 这样能有效避免数字1 和小写L 的混淆.Python 在显示长整数类 ...