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;
    }
相关推荐
千天夜5 分钟前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼9 分钟前
Python 大数据展示屏实例
大数据·开发语言·python
让学习成为一种生活方式13 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
羊小猪~~13 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
晨曦_子画18 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
南宫生41 分钟前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
放飞自我的Coder42 分钟前
【python ROUGE BLEU jiaba.cut NLP常用的指标计算】
python·自然语言处理·bleu·rouge·jieba分词
Heavydrink1 小时前
HTTP动词与状态码
java
ktkiko111 小时前
Java中的远程方法调用——RPC详解
java·开发语言·rpc
正义的彬彬侠1 小时前
【scikit-learn 1.2版本后】sklearn.datasets中load_boston报错 使用 fetch_openml 函数来加载波士顿房价
python·机器学习·sklearn