Java后台生成指定路径下创建指定名称的文件

1.Java后台生成指定路径下创建指定名称的CSV文件

java 复制代码
/**
     * <生成csv文件>
     * @param filePath    文件路径名称
     * @param fileName    文件名称
     * @param colNameList 标题数据信息
     * @param dataList    CSV的文件数据
     * @return filePath+fileName
     * @throws
     */
    public static File generateCsv(String filePath, String fileName,
                                     List<String> colNameList, List<List<String>> dataList) throws IOException {
        BufferedWriter csvWrite = null;
        String fileRealPath = filePath +"/"+ fileName + ".csv";
        try {
            //定义文件类型
            File csvFile = new File(fileRealPath);
            //获取文件目录
            if (!csvFile.exists()){
                File parentFile = csvFile.getParentFile();
                if (!parentFile.exists()){
                    if (parentFile.mkdirs()){
                        log.info("目录创建成功:"+parentFile.getAbsolutePath());
                    }else{
                        log.info("目录创建失败:"+parentFile.getAbsolutePath());
                    }
                }
            }
            //创建文件
            if (csvFile.createNewFile()){
                log.info("文件创建成功:"+csvFile.getAbsolutePath());
            }else{
                log.info("文件创建失败:"+csvFile.getAbsolutePath());
            }
            //先写入UTF-8-BOM编码头内容(防止用Excel文件打开CSV文件出现标题乱码情况)
            byte[] utf8bom={(byte)0xef,(byte)0xbb,(byte)0xbf};
            FileOutputStream fileOutputStream = new FileOutputStream(csvFile);
            fileOutputStream.write(utf8bom);
            csvWrite = new BufferedWriter(
                    new OutputStreamWriter(fileOutputStream, "UTF-8"), 1024);
            //写入表头
            write(colNameList, csvWrite);
            //写入数据
            for (List<String> dataPerRow : dataList) {
                write(dataPerRow, csvWrite);
            }
            csvWrite.flush();
            return csvFile;
        }
        catch (IOException e) {
            log.error("csv文件生成失败,原因:", e);
            throw new IOException("csv文件生成失败");
        }
        finally {
            try {
                if (null != csvWrite) {
                    csvWrite.close();
                }
            }
            catch (IOException e) {
                log.error("关闭文件流失败,原因:", e);
                throw new IOException("关闭文件流失败");
            }
        }
    }



	/**
     *将数据按行写入数据
     *@param dataList 每一行的数据集合
     *@param csvWreite 
     *@throws IOException
     */
    private static void write(List<String> dataList, BufferedWriter csvWrite) throws IOException {
        for (String data : dataList) {
            StringBuffer buffer = new StringBuffer();
            String rowStr = buffer.append("\"").append(data).append("\",").toString();
            csvWrite.write(rowStr);
        }
        csvWrite.newLine();
    }

2.Java后台生成指定路径下创建指定名称的xlsx文件

java 复制代码
 /**
     * 导出excel文件
     * @param filePath 文件路径
     * @param fileName 文件名称
     * @param colNameList 标题名称
     * @param dataList 每一页sheet数据列表
     * @return
     */
    public static File generateExcel(String filePath, String fileName,
                                     List<String> colNameList, List<Map<String,Object>> dataList) throws IOException {
        String fileRealPath = filePath +"/"+ fileName + ".xlsx";
        File excelFile = new File(fileRealPath);
        //获取文件目录
        if (!excelFile.exists()){
            File parentFile = excelFile.getParentFile();
            if (!parentFile.exists()){
                if (parentFile.mkdirs()){
                    log.info("目录创建成功:"+parentFile.getAbsolutePath());
                }else{
                    log.info("目录创建失败:"+parentFile.getAbsolutePath());
                }
            }
        }
        //创建文件
        if (excelFile.createNewFile()){
            log.info("文件创建成功:"+excelFile.getAbsolutePath());
        }else{
            log.info("文件创建失败:"+excelFile.getAbsolutePath());
        }
        Workbook workbook = new XSSFWorkbook(); // 创建Workbook
        for (Map<String, Object> map : dataList) {
        	//sheet的名称
            String sheetName = MapUtils.getString(map, "sheetName");
            //当前sheet的数据集合
            List<List<String>> tempDataList = (List<List<String>>)MapUtils.getObject(map, "dataList");
            Sheet sheet = workbook.createSheet(sheetName); // 创建Sheet

            // 创建表头
            Row headerRow = sheet.createRow(0);
            for (int i = 0; i < colNameList.size(); i++) {
                headerRow.createCell(i).setCellValue(colNameList.get(i));
            }
			
            if (tempDataList != null && tempDataList.size() > 0){
                // 写入数据
                for (int i = 0; i < tempDataList.size(); i++) {
                    List<String> lineDataList = tempDataList.get(i);
                    Row row = sheet.createRow(i + 1); // 从第二行开始写数据
                    for (int j = 0; j < lineDataList.size(); j++) {
                        row.createCell(j).setCellValue(lineDataList.get(j));
                    }
                }
            }


        }
        // 写入文件
        try (FileOutputStream fileOut = new FileOutputStream(excelFile)) {
            workbook.write(fileOut);
        } catch (IOException e) {
            log.error("写入文件失败:"+e,e.getMessage());
        } finally {
            try {
                workbook.close(); // 关闭Workbook释放资源
            } catch (IOException e) {
                log.error(" 关闭Workbook失败:"+e,e.getMessage());
            }
        }

        return excelFile;
    }
相关推荐
_oP_i37 分钟前
Pinpoint 是一个开源的分布式追踪系统
java·分布式·开源
mmsx40 分钟前
android sqlite 数据库简单封装示例(java)
android·java·数据库
bryant_meng42 分钟前
【python】OpenCV—Image Moments
开发语言·python·opencv·moments·图片矩
武子康1 小时前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
KevinRay_1 小时前
Python超能力:高级技巧让你的代码飞起来
网络·人工智能·python·lambda表达式·列表推导式·python高级技巧
Captain823Jack2 小时前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
资源补给站2 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
豪宇刘2 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
秋恬意2 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
Captain823Jack2 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词