读写csv文件——考虑各种异常场景,源码
CSV是以逗号间隔的文本文件,其文件以纯文本形式存储表格数据(数字和文本)。在JAVA中可以通过输出文件流的方式将数据写入CSV文件,通过BufferedReader类去读该路径中的文件,使用readLine方法进行逐行读取。
- 写csv文件需要注意:
1、如果需要重复写文件,需要考虑删除已经存在的文件。
- 读csv文件需要注意:
1、文件路径是否存在
2、文件表头是否正确,考虑兼容性问题时,只需要考虑是否存在需要的列即可
第一步:创建一个对象类
package testCSV;
public class Person {
private String id;
private String name;
private String sex;
private int age;
public Person() {
}
public Person(String id, String name, String sex, int age) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
第二步:写和读csv文件
package testCSV; import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID; public class FileCsv {
private static final String fileName = "D:\\workspace\\tmp\\obj.csv";
private static final String CSV_SPLIT = ",";
private static int idIndex = -1;
private static int nameIndex = -1;
private static int sexIndex = -1;
private static int ageIndex = -1; /**
* 生成uuid
*
* @return 32位uuid
*/
private static String getUUID32() {
return UUID.randomUUID().toString().replace("-", "").toLowerCase();
} /**
* 构造数据
*
* @return 数据
*/
private static List<Person> buildData() {
List<Person> personList = new ArrayList<Person>(10);
personList.add(new Person(getUUID32(), "张三", "female", 26));
personList.add(new Person(getUUID32(), "李四", "man", 34));
personList.add(new Person(getUUID32(), "王五", "female", 55));
personList.add(new Person(getUUID32(), "一一", "female", 11));
return personList;
} /**
* 写csv文件
*
* @return 文件名
*/
public static String writeCsv() {
File file = new File(fileName);
if (null != file && file.exists()) {
file.delete();
}
List<Person> personList = buildData();
FileOutputStream out = null;
OutputStreamWriter osw = null;
BufferedWriter bw = null;
try {
out = new FileOutputStream(file);
osw = new OutputStreamWriter(out, "UTF-8");
bw = new BufferedWriter(osw);
String title = "ID,NAME,SEX,AGE\r";
bw.append(title); for (Person data : personList) {
bw.append(data.getId());
bw.append(CSV_SPLIT);
bw.append(data.getName());
bw.append(CSV_SPLIT);
bw.append(data.getSex());
bw.append(CSV_SPLIT);
bw.append(String.valueOf(data.getAge()));
bw.append("\r");
}
}
catch (Exception e) {
e.printStackTrace();
}
finally {
if (bw != null) {
try {
bw.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
if (osw != null) {
try {
osw.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) {
try {
out.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
return fileName;
} /**
* 表头正确性校验
*
* @param titleInfo 表头
* @return
*/
private static Boolean checkTitle(String titleInfo) {
if (null == titleInfo || titleInfo.isEmpty()) {
return false;
}
String[] titles = titleInfo.split(CSV_SPLIT);
for (int i = 0; i < titles.length; i++) {
String titleName = titles[i];
if (titleName.equals("ID")) {
idIndex = i;
continue;
}
if (titleName.equals("NAME")) {
nameIndex = i;
continue;
}
if (titleName.equals("SEX")) {
sexIndex = i;
continue;
}
if (titleName.equals("AGE")) {
ageIndex = i;
continue;
}
}
if (idIndex == -1
|| nameIndex == -1
|| sexIndex == -1
|| ageIndex == -1) {
return false;
}
return true;
} /**
* 读取csv文件
*
* @return 数据
*/
private static List<Person> readCsv() {
File file = new File(fileName);
if (null == file) {
return new ArrayList<Person>();
}
if (!file.exists()) {
return new ArrayList<Person>();
}
BufferedReader bufferedReader = null;
List<Person> personList = new ArrayList<Person>(10);
try {
bufferedReader = new BufferedReader(new FileReader(file));
if (!checkTitle(bufferedReader.readLine())) {
return new ArrayList<Person>();
}
String line = "";
while (null != (line = bufferedReader.readLine())) {
String[] personInfo = line.split(CSV_SPLIT);
Person person = new Person();
person.setId(personInfo[idIndex]);
person.setName(personInfo[nameIndex]);
person.setSex(personInfo[sexIndex]);
person.setAge(Integer.parseInt(personInfo[ageIndex]));
personList.add(person);
}
}
catch (IOException e) {
e.printStackTrace();
}
finally {
try {
bufferedReader.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
return personList;
} public static void main(String[] args) {
writeCsv();
List<Person> personList = readCsv();
for (int i = 0; i < personList.size(); i++) {
Person person = personList.get(i);
System.out.println("id=" + person.getId()
+ ",name=" + person.getName()
+ ",sex=" + person.getSex()
+ ",age=" + String.valueOf(person.getAge()));
}
}
}
结果验证:
写文件读文件
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!
读写csv文件——考虑各种异常场景,源码的更多相关文章
- 使用Python读写csv文件的三种方法
Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...
- python读写csv文件
文章链接:https://www.cnblogs.com/cloud-ken/p/8432999.html Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗 ...
- 用opencsv文件读写CSV文件
首先明白csv文件长啥样儿: 用excel打开就变成表格了,看不到细节 推荐用其它简单粗暴一点儿的编辑器,比如Notepad++, csv文件内容如下: csv文件默认用逗号分隔各列. 有了基础的了解 ...
- python3读写csv文件
python读取CSV文件 python中有一个读写csv文件的包,直接import csv即可.利用这个python包可以很方便对csv文件进行操作,一些简单的用法如下. 1. 读文件 csv_ ...
- 利用JavaCSV API来读写csv文件
http://blog.csdn.net/loongshawn/article/details/53423121 http://javacsv.sourceforge.net/ 转载请注明来源-作者@ ...
- 使用 Apache Commons CSV 读写 CSV 文件
有时候,我们需要读写 CSV 文件,在这里给大家分享Apache Commons CSV,读写 CSV 文件非常方便. 具体官方文档请访问Apache Commons CSV. 官方文档已经写得很详细 ...
- python3使用csv包,读写csv文件
python操作csv,现在很多都用pandas包了,不过python还是有一个原始的包可以直接操作csv,或者excel的,下面举个例子说明csv读写csv文件的方法: import os impo ...
- C/C++读写csv文件
博客转载自:http://blog.csdn.net/u012234115/article/details/64465398 C++ 读写CSV文件,注意一下格式即可 #include <ios ...
- JAVA读写CSV文件
最近工作需要,需要读写CSV文件的数据,简单封装了一下 依赖读写CSV文件只需引用`javacsv`这个依赖就可以了 <dependency> <groupId>net.sou ...
随机推荐
- mysql 添加索引 mysql 如何创建索引
1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引 ...
- [转]NSProxy实现AOP方便为ios应用实现异常处理策略
[转载自:http://blog.csdn.net/yanghua_kobe/article/details/8395535] 前段时间关注过objc实现的AOP,在GitHub找到了其中的两个库:A ...
- python3.6使用scrapy报错
用python做爬虫的,肯定熟悉scrapy,不过新手安装总是会遇到各种奇葩错误. 错误一:building 'twisted.test.raiser' extensionerror: Microso ...
- P2046 [NOI2010]海拔
题目链接 题意分析 首先一看就知道这是一道最小割 这里奉上最小割的代码 #include<iostream> #include<cstdio> #include<cstr ...
- 安装配置python、beautifulsoup4、pip的心酸总结
1.python下载安装不纠结,但如果要加入到eclipse里面就要注意一下版本,版本不匹配会造成,要不python降级,要不eclipse升级的情况 2.在稍新版本的python立面就附带下载在了p ...
- LINQ中的"延迟查询"特性【转】
本文转载自:LINQ中的"延迟查询"特性 详细了解“延迟查询”:C#学习笔记(八)—–LINQ查询之延迟执行 很多标准查询操作符的设计原型都是返回一个IEnumerable< ...
- vue构造器以及实例属性
一.构造器 1.vue.js就是一个构造器,通过构造器Vue来实例化一个对象:例如:var vm = new Vue({}); 2.实例化Vue时,需要传入一个参数(选项对象): 3.参数:选项对象可 ...
- 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装Theano(图文详解)
不多说,直接上干货! Theano的安装教程目前网上一搜很多,前几天折腾了好久,终于安装成功了Anaconda3(Python3)的Theano,嗯~发博客总结并分享下经验教训吧. 渣电脑,显卡用的是 ...
- ServiceLoader解读
SPI的全名为Service Provider Interface.普通开发人员可能不熟悉,因为这个是针对厂商或者插件的.在java.util.ServiceLoader的文档里有比较详细的介绍. 简 ...
- Mac 安装Git
一.安装 在进行安装前,要说一下,Git和SVN一样,都需要创建一个服务器的,他们都可以创建自己的版本管理服务器.对于个人和小团队来说,使用托管服务器可能更合适. 常见的有Github 和 Bitbu ...
读文件