近段时间搞文件上传代码,中间用到了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中避过了输入文件中有逗号的情况,不是很健全。但是希望给用到的人一点启发,也给自己一点回顾,主要的还是以后用到的话方便查看。