java实现写大量数据到文件中

  • 生成.txt文件
  • 生成.csv文件
  • 生成.xls文件
package com.test;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class CreateFileUtil {

    /**
     * 生成.TXT格式文件,行数几乎无上限
     */
    public static boolean createTxtFile(List<Object[]> rows, String filePath, String fileName) {
        // 标记文件生成是否成功
        boolean flag = true;

        try {
            // 含文件名的全路径
            String fullPath = filePath + File.separator + fileName + ".txt";

            File file = new File(fullPath);
            if (file.exists()) { // 如果已存在,删除旧文件
                file.delete();
            }
            file = new File(fullPath);
            file.createNewFile();

            // 格式化浮点数据
            NumberFormat formatter = NumberFormat.getNumberInstance();
            formatter.setMaximumFractionDigits(10); // 设置最大小数位为10

            // 格式化日期数据
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

            // 遍历输出每行
            PrintWriter pfp = new PrintWriter(file);
            for (Object[] rowData : rows) {
                StringBuffer thisLine = new StringBuffer("");
                for (int i = 0; i < rowData.length; i++) {
                    Object obj = rowData[i]; // 当前字段

                    // 格式化数据
                    String field = "";
                    if (null != obj) {
                        if (obj.getClass() == String.class) { // 如果是字符串
                            field = (String) obj;
                        } else if (obj.getClass() == Double.class || obj.getClass() == Float.class) { // 如果是浮点型
                            field = formatter.format(obj); // 格式化浮点数,使浮点数不以科学计数法输出
                        } else if (obj.getClass() == Integer.class || obj.getClass() == Long.class
                                || obj.getClass() == Short.class || obj.getClass() == Byte.class) { // 如果是整形
                            field += obj;
                        } else if (obj.getClass() == Date.class) { // 如果是日期类型
                            field = sdf.format(obj);
                        }
                    } else {
                        field = " "; // null时给一个空格占位
                    }

                    // 拼接所有字段为一行数据,用tab键分隔
                    if (i < rowData.length - 1) { // 不是最后一个元素
                        thisLine.append(field).append("\t");
                    } else { // 是最后一个元素
                        thisLine.append(field);
                    }
                }
                pfp.print(thisLine.toString() + "\n");
            }
            pfp.close();

        } catch (Exception e) {
            flag = false;
            e.printStackTrace();
        }
        return flag;
    }

    /**
     * 生成.csv格式文件,行数几乎无上限
     */
    public static boolean createCsvFile(List<Object[]> rows, String filePath, String fileName) {
        // 标记文件生成是否成功
        boolean flag = true;

        // 文件输出流
        BufferedWriter fileOutputStream = null;

        try {
            // 含文件名的全路径
            String fullPath = filePath + File.separator + fileName + ".csv";

            File file = new File(fullPath);
            if (!file.getParentFile().exists()) { // 如果父目录不存在,创建父目录
                file.getParentFile().mkdirs();
            }
            if (file.exists()) { // 如果已存在,删除旧文件
                file.delete();
            }
            file = new File(fullPath);
            file.createNewFile();

            // 格式化浮点数据
            NumberFormat formatter = NumberFormat.getNumberInstance();
            formatter.setMaximumFractionDigits(10); // 设置最大小数位为10

            // 格式化日期数据
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

            // 实例化文件输出流
            fileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "GB2312"), 1024);

            // 遍历输出每行
            Iterator<Object[]> ite = rows.iterator();
            while (ite.hasNext()) {
                Object[] rowData = (Object[]) ite.next();
                for (int i = 0; i < rowData.length; i++) {
                    Object obj = rowData[i]; // 当前字段
                    // 格式化数据
                    String field = "";
                    if (null != obj) {
                        if (obj.getClass() == String.class) { // 如果是字符串
                            field = (String) obj;
                        } else if (obj.getClass() == Double.class || obj.getClass() == Float.class) { // 如果是浮点型
                            field = formatter.format(obj); // 格式化浮点数,使浮点数不以科学计数法输出
                        } else if (obj.getClass() == Integer.class || obj.getClass() == Long.class
                                || obj.getClass() == Short.class || obj.getClass() == Byte.class) { // 如果是整形
                            field += obj;
                        } else if (obj.getClass() == Date.class) { // 如果是日期类型
                            field = sdf.format(obj);
                        }
                    } else {
                        field = " "; // null时给一个空格占位
                    }
                    // 拼接所有字段为一行数据
                    if (i < rowData.length - 1) { // 不是最后一个元素
                        fileOutputStream.write("\"" + field + "\"" + ",");
                    } else { // 是最后一个元素
                        fileOutputStream.write("\"" + field + "\"");
                    }
                }
                // 创建一个新行
                if (ite.hasNext()) {
                    fileOutputStream.newLine();
                }
            }
            fileOutputStream.flush();
        } catch (Exception e) {
            flag = false;
            e.printStackTrace();
        } finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return flag;
    }

    /**
     * 生成.xls格式文件,单页上限: 03版是65536行 ,07版的是1048576行, 10版不知
     */
    public static boolean createXlsFile(List<Object[]> rows, String filePath, String fileName) {
        // 标记文件生成是否成功
        boolean flag = true;

        try {
            // 创建一个webbook,对应一个Excel文件
            XSSFWorkbook wb = new XSSFWorkbook();

            // 在webbook中添加一个sheet,对应Excel文件中的sheet
            XSSFSheet sheet = wb.createSheet(fileName);

            // 遍历输出每行
            for (int i = 0; i < rows.size(); i++) {
                Object[] rowData = rows.get(i); // 每一行的数据
                XSSFRow row = sheet.createRow(i);
                for (int j = 0; j < rowData.length; j++) {
                    XSSFCell cell = row.createCell(j);
                    // 假设只有三种类型的数据
                    if (rowData[j].getClass() == String.class) { // String类型数值
                        cell.setCellValue((String) rowData[j]);
                    } else if (rowData[j].getClass() == double.class) { // double类型数值
                        cell.setCellValue((Double) rowData[j]);
                    } else if (rowData[j].getClass() == int.class) { // int类型数值
                        cell.setCellValue((Integer) rowData[j]);
                    }
                }
            }

            String fullPath = filePath + File.separator + fileName + ".xls";// 含文件名的全路径

            File file = new File(fullPath);
            if (file.exists()) { // 如果已存在,删除旧文件
                file.delete();
            } else { // 如果不存在,创建新文件
                file.createNewFile();
            }

            FileOutputStream fileOut = new FileOutputStream(file); // 写出数据到文件
            wb.write(fileOut);
            fileOut.close();
        } catch (Exception e) {
            flag = false;
            e.printStackTrace();
        }

        return flag;
    }

}
时间: 2024-10-14 04:45:35

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

【C#/WPF】保存BitmapImage数据到文件中

原文:[C#/WPF]保存BitmapImage数据到文件中 参考: http://stackoverflow.com/questions/35804375/how-do-i-save-a-bitmapimage-from-memory-into-a-file-in-wpf-c /// <summary> /// 把内存里的BitmapImage数据保存到硬盘中 /// </summary> /// <param name="bitmapImage">

Java把double数据写入文件中

public class ReadOrWriteObject { private FileInputStream fileIns = null ;//文件输入流 private FileOutputStream fileOts = null;//文件输出流 private ObjectInputStream objectIns = null ;//对象输入流 private ObjectOutputStream objectOts = null ;//对象输出流 private String f

VC中使用CFile正确的追加写中文数据到文件不出现乱码-unicode字符集

CFile saveFile; CString file_name = getFileName(); BOOL isOpenOK = saveFile.Open(file_name, CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate, NULL); if (false == isOpenOK) { MessageBox(L"文件打开失败!"); return; } //是文件保存为unicode格式 //为了uni

java poi 写入大量数据到excel中

最近在利用poi往excel中写入大量数据时,发现excel2003最多只支持65535条,大量数据时容易造成oom,上网查了一下api,发现目前对于2003,每个sheet最多支持65535条,若数据量远超65535,建议分sheet处理,而poi3.8之后,出现了SXSSFWorkbook,可以支持大数据量的写入excel操作,但是目前只支持excel2007 HSSF是POI工程对Excel 97(-2007)文件操作的纯Java实现 XSSF是POI工程对Excel 2007 OOXML

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

有时候,需要将数据以一定格式导出到txt文件中.利用Java的IO可以轻松的导出数据到txt中. 1 package Action.txt; 2 3 import java.io.BufferedWriter; 4 import java.io.File; 5 import java.io.FileOutputStream; 6 import java.io.OutputStreamWriter; 7 import java.io.Writer; 8 import java.util.Array

Android 中保存数据到文件中

1.在安卓开发中,会遇到保存数据到手机中以及从手机中获取数据的情况 /** * 把数据存放到手机内存中 * * @param number * @param password * @return */ public static boolean saveUserInfo(Context context, String number, String password) { try { // getCacheDir()方法用于获取/data/data/<package name>/cache目录

Java在已存在的pdf文件中生成文字和图片--基础

自我总结,有什么不足之处请告知,感激不尽!下一次总结pdf模板映射生成报表(应对多变的pdf报表需求,数据提供和报表生成解耦). 目的:在给定的pdf模板上生成报表,就需要知道最基本的操作:文字添加,图片添加. 原因:pdf生成中,最常见的操作就是生成文字,生成图片,所以本次和大家一块来学习一下文字和图片的生成. 准备工作: 1. 引入jar: 在pom.xml中引入itextpdf包语句,在链接随便选一个版本(我的是5.20):http://www.mvnrepository.com/arti

PHP中Post和Get获取数据写入文件中

有时候Post或者Get传过来的数据我们不知道它是个什么样的形式,它可能是JSON格式或者就是简单提交过来的数据,这时候我们可以把他写入到文本中,就可以看到传过来的数据是什么格式了. $val = ""; $currentDateTime = date('YmdHis',time()); $currentDate = date('Ymd',time()); $fileName = "ioslog/".$currentDate;//文件名称 @$data = fope

嵌入式css样式,写在当前的文件中

现在有一任务,把下面的“超酷的互联网”.“服务及时贴心”.“有趣易学”这三个短词文字字号修改为18px. 如果用内联式css样式的方法进行设置将是一件很头疼的事情(为每一个<span>标签加入sytle="font-size:18px"语句),现在讲解一种新的方法嵌入式css样式来实现这个任务. 嵌入式css样式,就是可以把css样式代码写在<style type="text/css"></style>标签之间.如下面代码实现把三