/**
* 生成excel
*
* @param datas 数据
* @param header 表头
* @param folder 文件路径
* @param fileName 文件名称
* @return
*/
public static File writeExcel(List<List<String>> datas, List<String> header, String folder, String fileName, String fileType) {
if (datas == null || datas.isEmpty() || StringUtils.isEmpty(folder)
|| StringUtils.isEmpty(fileName)) {
return null;
}
// 判断路径是否正确
File file = new File(folder);
if (!file.isDirectory()) {
return null;
}
// 设置文件后缀
if (!fileName.endsWith("." + fileType)) {
fileName = fileName + "." + fileType;
}
// 第一步,创建一个workbook对应一个excel文件
Workbook wb = null;
if (fileType.endsWith("xls")) {
//Excel 2003
wb = new HSSFWorkbook();
}else{
//Excel 2007
wb = new XSSFWorkbook();
}
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(wb.createDataFormat().getFormat("@"));
// 第二部,在workbook中创建一个sheet对应excel中的sheet
Sheet sheet = wb.createSheet(fileName);
// 第三部,在sheet表中添加表头第0行,老版本的poi对sheet的行列有限制
Row row = sheet.createRow(0);
// 第四步,创建单元格,设置表头
if (!(header == null || header.isEmpty())) {
for (int i = 0; i < header.size(); i++) {
row.createCell(i).setCellValue(header.get(i));
sheet.setDefaultColumnStyle(i,cellStyle);
}
}
// 第五步,写入实体数据,实际应用中这些数据从数据库得到,对象封装数据,集合包对象。对象的属性值对应表的每行的值
for (int i = 0; i < datas.size(); i++) {
Row row1 = sheet.createRow(i + 1);
List<String> data = datas.get(i);
// 创建单元格设值
for (int j = 0; j < data.size(); j++) {
row1.createCell(j).setCellValue(data.get(j));
sheet.setDefaultColumnStyle(i,cellStyle);
}
}
// 将文件保存到指定的位置
try {
if (!file.exists()) {
file.mkdirs();
}
FileOutputStream fos = new FileOutputStream(folder + File.separator + fileName);
wb.write(fos);
fos.close();
} catch (IOException e) {
logger.info("文件保存异常", "000");
}
return new File(folder + File.separator + fileName);
}
/**
* CSV文件生成方法
*
* @param head 首行数据
* @param dataList 所有数据
* @param outPutPath 路径
* @param filename 文件名
* @return
*/
public static File createCSVFile(String[] head, List<String[]> dataList, String outPutPath, String filename, String separator) {
File csvFile = null;
BufferedWriter csvWtriter = null;
try {
csvFile = new File(outPutPath + File.separator + filename);
File parent = csvFile.getParentFile();
if (parent != null && !parent.exists()) {
parent.mkdirs();
}
csvFile.createNewFile();
// GB2312使正确读取分隔符","
csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "GB2312"), 1024);
// 写入文件头
writeRow(head, csvWtriter, separator);
// 写入文件内容
for (String[] row : dataList) {
writeRow(row, csvWtriter, separator);
}
csvWtriter.flush();
} catch (Exception e) {
logger.info("文件写入失败",e);
} finally {
try {
csvWtriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return csvFile;
}
/**
* 写一行数据方法
*
* @param row
* @param csvWriter
* @throws IOException
*/
private static void writeRow(String[] row, BufferedWriter csvWriter, String separator) {
StringBuffer buf = new StringBuffer();
if (null==row){
}else {
for (int i = 0; i < row.length; i++) {
if (null==row[i]){
buf.append(separator);
}else if (i==row.length-1){
buf.append("\t").append(row[i]).append("\t");
}else {
buf.append("\t").append(row[i]).append("\t").append(separator);
}
}
}
try {
csvWriter.write(buf.toString());
} catch (IOException e) {
logger.info("写入文件失败");
}
try {
csvWriter.newLine();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 将数据写入txt文件
*
* @param destPath 目标文件路径
* @param dataList 字符串数据列表
* @return 文件
*/
public static File writeDataToTxtFile(String destPath, String[] fistline, List<String[]> dataList, String separator) {
//参数校验
if (StringUtils.isEmpty(destPath) || !destPath.endsWith(".txt")) {
return null;
}
File txtFile = new File(destPath);//txt文件
PrintWriter txtWriter = null;//txt输出流
try {
//如果文件不存在就新建文件
if (!txtFile.exists()) {
txtFile.createNewFile();
}
BufferedWriter out = new BufferedWriter(new FileWriter(txtFile));
if (null==fistline){
out.write("\r\n");
}else {
List<String> list = Arrays.asList(fistline);
if (CollectionUtils.isNotEmpty(list)){
for (int i = 0; i < fistline.length; i++) {
String s = fistline[i];
if(StringUtils.isEmpty(s)){
out.write(""+separator);
}else if (i==fistline.length-1){
out.write(s);
}else {
out.write(s + separator);
}
}
}
out.write("\r\n");
}
for (String[] strings : dataList) {
for (int i = 0; i < strings.length; i++) {
String s = strings[i];
if(StringUtils.isEmpty(s)){
out.write(""+separator);
}else if (i==strings.length-1){
out.write(s);
}else {
out.write(s + separator);
}
}
out.write("\r\n"); //\r\n即为换行
}
out.flush(); // 把缓存区内容压入文件
} catch (IOException e) {
logger.error("写入txt文件失败", e);
return null;
} finally {
//关闭输出流
if (txtWriter != null) {
txtWriter.close();
}
}
//返回
return txtFile;
}
/**
* 删除单个文件
*
* @param filePath 文件目录路径
* @param fileName 文件名称
* @return
*/
public static String deleteFile(String filePath, String fileName) {
File file = new File(filePath);
if (file.exists()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
if (files[i].getName().equals(fileName)) {
files[i].delete();
return "删除成功";
}
}
}
}
return "删除失败";
}
生成excel,txt,csv文件,删除本地文件工具类,
于 2021-11-09 09:42:04 首次发布