csv(comma separated values )操作

本文介绍CSV文件的基本概念及其在电子表格或数据库软件中的应用。同时提供了CSV文件导入导出的Java实现方法,包括如何使用Java进行CSV文件的读写操作。

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

CSV是逗号分隔文件(Comma Separated Values)的首字母英文缩写,是一种用来存储数据的纯文本格式,通常用于电子表格或数据库软件。在 CSV文件中,数据“栏”以逗号分隔,可允许程序通过读取文件为数据重新创建正确的栏结构,并在每次遇到逗号时开始新的一栏。如:

1,张三,男
2,李四,男
3,小红,女

 ==============================================

1.如果你入到csv文件打开是乱码情况.请事先用记事本打开,然后用ANSI编码保存.再次打开即可,也可以自己设置编码集

2.如果你的内容被excel打开时 自动转换为科学计算法 显示.可以在每行代码后面加上一个"/t"

===============================================

1、CSV导入/导出封装类

复制代码
package com.parami.utils;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

/**   
 * CSV操作(导出和导入)
 *
 * @version 1.0 Jan 27, 2014 4:30:58 PM   
 */
public class CSVUtils {
    
    /**
     * 导出
     * 
     * @param file csv文件(路径+文件名),csv文件不存在会自动创建
     * @param dataList 数据
     * @return
     */
    public static boolean exportCsv(File file, List<String> dataList){
        boolean isSucess=false;
        
        FileOutputStream out=null;
        OutputStreamWriter osw=null;
        BufferedWriter bw=null;
        try {
            out = new FileOutputStream(file);
            osw = new OutputStreamWriter(out);
            bw =new BufferedWriter(osw);
            if(dataList!=null && !dataList.isEmpty()){
                for(String data : dataList){
                    bw.append(data).append("\r");
                }
            }
            isSucess=true;
        } catch (Exception e) {
            isSucess=false;
        }finally{
            if(bw!=null){
                try {
                    bw.close();
                    bw=null;
                } catch (IOException e) {
                    e.printStackTrace();
                } 
            }
            if(osw!=null){
                try {
                    osw.close();
                    osw=null;
                } catch (IOException e) {
                    e.printStackTrace();
                } 
            }
            if(out!=null){
                try {
                    out.close();
                    out=null;
                } catch (IOException e) {
                    e.printStackTrace();
                } 
            }
        }
        
        return isSucess;
    }
    
    /**
     * 导入
     * 
     * @param file csv文件(路径+文件)
     * @return
     */
    public static List<String> importCsv(File file){
        List<String> dataList=new ArrayList<String>();
        
        BufferedReader br=null;
        try { 
            br = new BufferedReader(new FileReader(file));
            String line = ""; 
            while ((line = br.readLine()) != null) { 
                dataList.add(line);
            }
        }catch (Exception e) {
        }finally{
            if(br!=null){
                try {
                    br.close();
                    br=null;
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
 
        return dataList;
    }
}
复制代码

2、CSV导入/导出测试

复制代码
package junit.test;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.parami.utils.CSVUtils;

/**
 * CSV操作(导出和导入)
 * 
 * @version 1.0 Jan 27, 2014 4:17:02 PM
 */
public class CsvTest {

    /**
     * CSV导出
     * 
     * @throws Exception
     */
    @Test
    public void exportCsv() {
        List<String> dataList=new ArrayList<String>();
        dataList.add("1,张三,男");
        dataList.add("2,李四,男");
        dataList.add("3,小红,女");
        boolean isSuccess=CSVUtils.exportCsv(new File("D:/test/ljq.csv"), dataList);
        System.out.println(isSuccess);
    }
    
    /**
     * CSV导出
     * 
     * @throws Exception
     */
    @Test
    public void importCsv()  {
        List<String> dataList=CSVUtils.importCsv(new File("D:/test/ljq.csv"));
        if(dataList!=null && !dataList.isEmpty()){
            for(String data : dataList){
                System.out.println(data);
            }
        }
    }
    
    
}
在Oracle数据库中,将"逗号分隔值"(CSV)转换为多行数据通常涉及到两个步骤:首先解析字符串,然后将每个值插入到单独的行中。以下是基本的SQL和PL/SQL示例: 1. **使用SQL查询 (静态分割)**: 对于简单的单次查询,你可以使用REGEXP_SUBSTR和UNION ALL,假设你的字段名为`csv_field`: ```sql WITH data AS ( SELECT 'a,b,c,d' AS csv_field ), rows AS ( SELECT level - 1 AS index, REGEXP_SUBSTR(csv_field, '[^,]+', 1, level) AS value FROM dual CONNECT BY REGEXP_SUBSTR(csv_field, '[^,]+', 1, level) IS NOT NULL AND level <= INSTR(csv_field, ',') + 1 ) SELECT value FROM rows WHERE index > 0 UNION ALL SELECT csv_field AS value FROM data WHERE level = 1; -- 处理首行(如果有) ``` 这将返回结果集,每一行是一个单独的值。 2. **使用PL/SQL过程**: 如果需要处理大量的数据或者复杂的情况,可以编写一个PL/SQL过程,如: ```plsql PROCEDURE split_csv_to_rows(p_csv VARCHAR2, p_output_table OUT sys_refcursor) IS TYPE t_split IS TABLE OF VARCHAR2 INDEX BY PLS_INTEGER; v_split t_split; BEGIN v_split := t_split(PLS_INTEGER.range(1, INSTR(p_csv, ','))); FOR i IN 1..LENGTH(p_csv) LOOP IF p_csv(i) = ',' THEN INSERT INTO p_output_table VALUES(v_split(i - 1)); v_split(i) := ''; ELSE v_split(i) := v_split(i) || p_csv(i); END IF; END LOOP; -- 插入最后一行 IF v_split.COUNT > 0 THEN INSERT INTO p_output_table VALUES(v_split(v_split.COUNT)); END IF; END split_csv_to_rows; ``` 调用此过程并将结果集赋值给合适的表型游标变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值