Java下将数据写入CSV文件中

本文详细介绍了如何使用Java编程语言将数据高效地写入CSV文件,包括选择合适的库,创建CSV writer对象,设置分隔符,以及处理不同类型的数据等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.*;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

/**Created by JYM on 2018/12/26
 * 下面的这段程序是Java将数据写入CSV文件中;
 * */

public class CSV
{

    public static void main(String[] args)
    {
        Object[] objects = {1,2,3,4,8,7,9,6,5,11,12};
        ArrayList<Object[]> list = new ArrayList<>();
        list.add(objects);
        list.add(objects);
        list.add(objects);
        boolean Flag=createCsvFile(list,"G:\\CSVDir","csvFile");
        if (Flag == true)
        {
            System.out.print("CSV文件创建成功!");
        }else {
            System.out.print("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)     //不是最后一个元素
                        {
//                            System.out.print("\""+field+"\""+",");
                            fileOutputStream.write("\""+field+"\""+",");
                        }else {
                            //最后一个元素
                            fileOutputStream.write("\""+field+"\"");
                        }
                    }
                    //创建一个新行
                    if (ite.hasNext())
                    {
                        //fileOutputStream.newLine();
                    }
                }
                fileOutputStream.newLine();     //换行,创建一个新行;
            }
            fileOutputStream.flush();
        }catch (Exception e)
        {
            flag = false;
            e.printStackTrace();
        }finally {
            try{
                fileOutputStream.close();
            }catch (IOException e)
            {
                e.printStackTrace();
            }
        }
        return flag;
    }
}

Java中,可以使用开源库如Apache POI或OpenCSV来操作CSV文件,包括读写和处理Excel工作簿中的不同sheet页。以下是使用Apache POI操作CSV文件的基本步骤: 1. **添加依赖**:首先,你需要在项目中添加Apache POI的依赖,如果是Maven项目,可以在pom.xml中加入如下依赖: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>最新版本号</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>最新版本号</version> </dependency> ``` 2. **创建`HSSFWorkbook`或`XSSFWorkbook`**:对于CSV文件,通常使用`HSSFWorkbook`,如果是Excel文件且需要操作sheet,则用`XSSFWorkbook`。 3. **创建Sheet并写入数据**: ```java HSSFWorkbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // 创建行和单元格 Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("Data"); // 写入文件 try (FileOutputStream outputStream = new FileOutputStream("output.csv")) { workbook.write(outputStream); } ``` 对于Excel,你可以创建`XSSFSheet`替换`Sheet`,并用`XSSFWorkbook`替换`HSSFWorkbook`。 4. **切换到其他sheet**: ```java XSSFSheet sheet2 = workbook.createSheet("Sheet2"); // 创建新sheet // ... 同样写出数据到sheet2 // 切换当前活跃的sheet workbook.setActiveSheet(sheet2); ``` 5. **关闭工作簿**: ```java workbook.close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值