csv文件读取以及写入

    近段时间搞文件上传代码,中间用到了csv文件的读取以及存入,这里总结下!

main函数


package testFile;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.util.List;

import logic.CsvLogic;

public class TestCsvFile {
	public static void main(String[] args) {
		try {
	        String path = "C:\\Users\\DFLENOVO\\Desktop\\company\\brandShopModel.csv";
	        File fiie = new File(path);
	        InputStream inputStream = new FileInputStream(fiie);
	        List<List<Object>> read = CsvLogic.read(inputStream);

	        //取出文件内容,
	        for(int i = 0;i<read.size();i++){
	            List<Object> objects = read.get(i);
	            for(int j = 0;j<objects.size();j++){
	                System.out.print(objects.get(j)+" ");
	            }
	            System.out.println();
	        }
	        writeResponFile(read);//写文件
	    }catch (Throwable e) {
	        e.printStackTrace();
	    }
	}
	
	
	private static void writeResponFile(List<List<Object>> responList){
        //生成结果文件
        String path = "";//文件路径
        File tempFile = new File(path + File.separator + "结果.csv");
        FileWriter writer = null;
        try {
            writer = new FileWriter(tempFile,false);
            writer.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF }));
            writer.write("");//表头


            for (int i = 0; i < responList.size(); i++) {
                List<Object> objects = responList.get(i);
                StringBuilder sb = new StringBuilder();
                for(int index = 0;index<objects.size();index++) {
                    if(index == objects.size()-1){
                        sb.append(objects.get(index).toString());
                    }else {
                        sb.append(objects.get(index).toString()).append(",");
                    }
                }
                sb.append("\r\n");
                writer.write(sb.toString());
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                writer.flush();
                writer.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
}

CsvLogic

package logic;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class CsvLogic {
	
	public final static List<List<Object>> read(InputStream inputStream) throws Throwable {

        InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"utf-8");
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String line = "";
        int count = 0;
        List<List<Object>> data = new ArrayList<>();
        while ((line = bufferedReader.readLine()) != null){

            if(count == 0){
                count++;
                continue;
            }
            String[] split = line.split(",",-1);

            List<Object> objects = new ArrayList<>();
            for(int i = 0;i<split.length;i++){
                Object object = split[i];
                objects.add(object);

            }
            data.add(objects);
        }
        return data;
	}
	
}

csvlogic中还需要细节的处理,其中需要了解csv格式中的utf-8 bom。writer.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF }));是csv中的bom,不然文件用excle打开是乱码。csv中是用逗号来分割的,我的logic中避过了输入文件中有逗号的情况,不是很健全。但是希望给用到的人一点启发,也给自己一点回顾,主要的还是以后用到的话方便查看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来回答你的问题。 Python有内置的csv模块,可以用于处理csv文件读取写入、数据集成等操作。下面我会简单介绍一下这些操作。 1. 读取csv文件读取csv文件,可以使用csv模块中的reader()函数。这个函数可以将csv文件中的每一行转换成一个列表,然后返回一个包含所有行的列表。下面是一个简单的例子: ```python import csv with open('data.csv') as f: reader = csv.reader(f) header = next(reader) data = [row for row in reader] ``` 这个例子中,我们打开了一个名为"data.csv"的文件,并使用csv.reader()函数将文件中的每一行转换成一个列表。在这个例子中,我们还使用了next()函数来获取csv文件的第一行,也就是表头。最后,我们将所有数据存储在一个名为"data"的列表中。 2. 写入csv文件写入csv文件,可以使用csv模块中的writer()函数。这个函数可以将数据写入csv文件中。下面是一个简单的例子: ```python import csv data = [['name', 'age', 'gender'], ['Alice', 25, 'female'], ['Bob', 30, 'male'], ['Charlie', 35, 'male']] with open('output.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerows(data) ``` 这个例子中,我们创建了一个名为"data"的列表,其中包含了要写入csv文件中的所有数据。然后,我们打开一个名为"output.csv"的文件,并使用csv.writer()函数将数据写入文件中。在这个例子中,我们使用了writerows()函数来将整个二维列表写入文件中。 3. 数据集成 要将多个csv文件中的数据集成到一个文件中,可以使用csv模块中的writer()函数和reader()函数。下面是一个简单的例子: ```python import csv files = ['data1.csv', 'data2.csv', 'data3.csv'] output_file = 'output.csv' with open(output_file, 'w', newline='') as f: writer = csv.writer(f) for file in files: with open(file) as f2: reader = csv.reader(f2) header = next(reader) writer.writerow(header) for row in reader: writer.writerow(row) ``` 这个例子中,我们首先定义了要集成的多个csv文件文件名和输出文件文件名。然后,我们打开输出文件,并使用csv.writer()函数创建一个writer对象。接着,我们循环遍历每个csv文件,打开文件并使用csv.reader()函数创建一个reader对象。在每个文件的第一行,我们将表头写入输出文件中。然后,我们循环遍历每个文件中的行,并将其写入输出文件中。 希望这些例子能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值