首先思路要整理清楚。
1.通过缓冲字节流获取到文件夹下所有文件 命名 CsvUtil 将要获取的内容封装为List并返回,
package com.ityinhe.utils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.List;
public class CsvUtil {
@SuppressWarnings({ "resource", "unchecked", "rawtypes" })
public static List<String> getCsvData() throws Exception{
//
File file = new File("D:\\001");
//获取所有文件
File[] list = file.listFiles();
ArrayList<String> lists = new ArrayList();
//如果list为空 返回
//if(list == null) return ;
for(File f :list){
System.out.println(f);
if(!f.isDirectory()){//检查对象是否是一个文件夹
//Test1(f.getAbsolutePath());
//获取文件中的行数
LineNumberReader lnr = new LineNumberReader(new FileReader(f));
lnr.skip(Long.MAX_VALUE);
int linNo = lnr.getLineNumber()-1;
System.out.println(linNo);
//System.out.println(f);
System.out.println( "文件名:" + f.getAbsoluteFile() );
//
BufferedReader reader = new BufferedReader(new FileReader(f.getAbsoluteFile()));
//
reader.readLine();//第一行信息为标题信息,如果需要纯数据就注释掉
//
String line = null;
while((line=reader.readLine())!=null){
//System.out.println(reader.readLine().length());
//CSV格式文件为逗号分隔符文件,这里根据逗号切分
String[] item = line.split(",");
//System.out.println(item[item.length]);
//这就是你要的数据了
String userName = item[item.length-42]; //姓名
String cardNo = item[item.length-31];//身份证号
String className = item[item.length-30];//班级
System.out.println(userName+"\t"+cardNo+"\t"+className);
//将读取的数据数组加入集合
//
lists.add(line);
}
}else{
//
// System.out.println( "File:" + f.getAbsoluteFile() );
}//if结尾
}//for结尾
return lists;
}
public static int getFileLinNum(File f) throws Exception{
//获取文件中的行数
LineNumberReader lnr = new LineNumberReader(new FileReader(f));
lnr.skip(Long.MAX_VALUE);
int linNo = lnr.getLineNumber()-1;
System.out.println(linNo);
return linNo;
}
}
2.使用POI将数据到出 设置了一些POI样式
package com.ityinhe.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.LineNumberReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
public class ExcleUtil {
@SuppressWarnings({ "resource" })
public static void saveXlsxData() throws Exception{
//创建
Properties p=new Properties();
//获取外置配置文件
InputStream is=ClassLoader.getSystemResourceAsStream("db.properties");
//从输入流中读取属性列表
p.load(is);
//迭代 key:stringPropertyNames
Iterator<String> it= p.stringPropertyNames().iterator();
//定义一个变量用于接收key 的 value 值
String key = null;
//循环出来数据
while(it.hasNext()){
key=it.next();
System.out.println(key+" "+p.getProperty(key));
}
//获取CsvUtil返回值
List<String> lists= CsvUtil.getCsvData();
/*for (String string : lists) {
System.out.println(string);
}*/
//在内存中创建一个excel文件
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
//创建一个样式对象
HSSFCellStyle cellStyle = hssfWorkbook.createCellStyle();
HSSFFont hssfFont = hssfWorkbook.createFont();//生成一个字体 设置HSSFRowCell的字体样式
hssfFont.setColor(HSSFColor.BLACK.index); //字体颜色
hssfFont.setFontName("宋体");//设置样式字体
hssfFont.setFontHeightInPoints((short)12);// 字体大小
hssfFont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//字体正常 不加粗
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
cellStyle.setFont(hssfFont);//把字体加入样式
//生成一个字体 设置HSSFCell的字体样式
HSSFCellStyle cellStyle1 = hssfWorkbook.createCellStyle();
HSSFFont hssfFont1 = hssfWorkbook.createFont();
hssfFont1.setColor(HSSFColor.BLACK.index); //字体颜色
hssfFont1.setFontName("宋体");//设置样式字体
hssfFont1.setFontHeightInPoints((short)22);// 字体大小
hssfFont1.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//字体正常 不加粗
cellStyle1.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
cellStyle1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
cellStyle1.setFont(hssfFont1);//把字体加入样式
//设置单元格边框属性
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); //设置上边框
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); //设置右边框
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); //设置左边框
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//设置下边框
cellStyle.setTopBorderColor(HSSFColor.BLACK.index); //设置上边框颜色
cellStyle.setRightBorderColor(HSSFColor.BLACK.index);//设置右边框颜色
cellStyle.setTopBorderColor(HSSFColor.BLACK.index); //设置上边框颜色
cellStyle.setRightBorderColor(HSSFColor.BLACK.index);//设置右边框颜色
//创建一个标签页
HSSFSheet sheet = hssfWorkbook.createSheet("sheet1");
//设置单元格范围地址
CellRangeAddress cra = new CellRangeAddress(0,0,0, 5);
sheet.addMergedRegion(cra);//合并单元格
//创建标题行(大标题)
HSSFRow hssfRow1 =sheet.createRow(0);
HSSFCell rowCell=hssfRow1.createCell(0); //创建一行单元格
hssfRow1.setHeightInPoints(40); //设置单元格高度
rowCell.setCellStyle(cellStyle1); //给单元格的内容加入样式
rowCell.setCellValue(new SimpleDateFormat("yyyyMMdd").format(new Date())+p.getProperty(key));//第一行单元格内容
//创建标题行(小标题头)
HSSFRow hssfRow= sheet.createRow(1);
//第一列单元格
HSSFCell rowCell0 = hssfRow.createCell(0);
rowCell0.setCellStyle(cellStyle);
rowCell0.setCellValue("序号");
//第一列单元格
HSSFCell rowCell1 = hssfRow.createCell(1);
rowCell1.setCellStyle(cellStyle);
rowCell1.setCellValue("标记");
//第二列单元格
HSSFCell rowCell2 = hssfRow.createCell(2);
rowCell2.setCellStyle(cellStyle);
rowCell2.setCellValue("姓名");
//第三列单元格
HSSFCell rowCell3 = hssfRow.createCell(3);
rowCell3.setCellStyle(cellStyle);
rowCell3.setCellValue("身份证号");
//第四列单元格
HSSFCell rowCell4 = hssfRow.createCell(4);
rowCell4.setCellStyle(cellStyle);
rowCell4.setCellValue("班级");
//第五列单元格
HSSFCell rowCell5 = hssfRow.createCell(5);
rowCell5.setCellStyle(cellStyle);
rowCell5.setCellValue("备注");
//创建 POI-行
//遍历 -加入数据
File file = new File("D:\\001");
//获取所有文件
File[] list = file.listFiles();
//如果list为空 返回
//if(list == null) return ;
LineNumberReader lnr = null;
int linNo=1;
int tmp = 1;
for (File f : list) {
lnr = new LineNumberReader(new FileReader(f));
lnr.skip(Long.MAX_VALUE);
linNo = lnr.getLineNumber()-1;
System.out.println(linNo);
}
/*for (int i = 1; i <= linNo; i++) {
tmp=i;
}*/
//Test1(f.getAbsolutePath());
for (String str : lists) {
String[] s = str.split(",");
//System.out.println(s.equals(s));
tmp=tmp%linNo-2;
tmp++;
int i;
for (i = 1; i < tmp%linNo-1; i++) {
System.out.println(i);
}
//System.out.println(tmp);
HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum()+1);
//创建行
HSSFCell cell1 = dataRow.createCell(0);
HSSFCell cell2 = dataRow.createCell(1);
HSSFCell cell3 = dataRow.createCell(2);
HSSFCell cell4 = dataRow.createCell(3);
HSSFCell cell5 = dataRow.createCell(4);
HSSFCell cell6 = dataRow.createCell(5);
//给行加入颜色
cell1.setCellStyle(cellStyle);
cell2.setCellStyle(cellStyle);
cell3.setCellStyle(cellStyle);
cell4.setCellStyle(cellStyle);
cell5.setCellStyle(cellStyle);
cell6.setCellStyle(cellStyle);
cell1.setCellValue(tmp-1);
cell2.setCellValue(" ");
cell3.setCellValue(s[s.length-42]);
cell4.setCellValue(s[s.length-31]);
cell5.setCellValue(s[s.length-30]);
cell6.setCellValue(" ");
//设置身份证号一列的宽度
sheet.setColumnWidth(3, "身份证号".getBytes().length*3*256);
sheet.setColumnWidth(5, "备注".getBytes().length*3*256);
}
//导出文件的文件名 -临时加入了秒的时间戳
String filename="D:\\Excel\\"+p.getProperty(key)+"_采集名单"+new SimpleDateFormat("yyyyMMdd").format(new Date())+".xlsx";
//创建一个文件 传入filename
File files = new File(filename);
//判断文件是否存在
if(files.exists()){
//如果存在就删除
files.delete();
files.createNewFile();
//将文件放入 字节输出流输出
FileOutputStream stream = new FileOutputStream(files);
//POI - 导出EXCLE文件
hssfWorkbook.write(stream);
//关闭流
stream.close();
}else if(!files.exists()){
files.createNewFile();
//将文件放入 字节输出流输出
FileOutputStream stream = new FileOutputStream(files);
//POI - 导出XLSX文件
hssfWorkbook.write(stream);
//关闭流
stream.close();
}
}
}
3.名称是写在一个properties里的,由于没有使用任何框架,使用Java中的方式获取了,在ExcelUtil类里获取的
studyName=\u6211\u662F\u6D4B\u8BD5
4.写一个主方法进行编辑
package com.bornsoft.test;
import com.bornsoft.utils.ExcleUtil;
public class Test {
public static void main(String[] args) throws Exception{
ExcleUtil.saveXlsxData();
}
}
纯JAVA操作,只使用了POI