All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.thomas.alib.excel.exporter.provider.ExcelExport2File Maven / Gradle / Ivy

package com.thomas.alib.excel.exporter.provider;


import com.thomas.alib.excel.exporter.ExcelExporterBase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

/**
 * Excel导出者:针对直接导出为File文件的版本,主要负责处理File类和输出流的交互
 */
public class ExcelExport2File extends ExcelExporterBase {
    protected static final Logger logger = LoggerFactory.getLogger(ExcelExport2File.class);
    protected File file;

    /**
     * 构造方法
     *
     * @param file 本次导出对应输出的文件
     */
    protected ExcelExport2File(File file) {
        super();
        this.file = file;
        //没传入文件,默认在临时文件夹处理
        if (this.file == null) {
            this.file = new File(System.getProperty("java.io.tmpdir"), System.currentTimeMillis() + ".xlsx");
        }
        this.child = this;
        logger.debug("基于文件对象的导出开始");
    }

    /**
     * 提供具体导出的输出流
     *
     * @return 输出流对象
     * @throws Exception 创建文件和输出流时可能产生异常
     */
    @Override
    protected OutputStream getOutputStream() throws Exception {
        logger.debug("文件将被导出到:" + file.getAbsolutePath());
        //检查指定文件目录是否存在,不存在则创建
        File parent = file.getParentFile();
        if (!parent.exists()) {
            if (!parent.mkdirs()) {
                throw new RuntimeException("导出文件目录\"" + parent.getAbsolutePath() + "\"创建失败,无法继续导出。");
            }
        }
        //检查文件是否存在,存在先删除,再生成
        if (file.exists()) {
            if (!file.delete()) {
                throw new RuntimeException("导出文件\"" + file.getAbsolutePath() + "\"已存在,且删除失败,无法继续导出。");
            }
        }
        //生成导出文件
        if (!file.createNewFile()) {
            throw new RuntimeException("导出文件\"" + file.getAbsolutePath() + "\"创建失败,无法继续导出。");
        }
        return new FileOutputStream(file);
    }

    /**
     * 销毁
     */
    @Override
    public void destroy() {
        super.destroy();
        file = null;
    }

    /**
     * 根据File对象导出,直接导出到对应文件中
     *
     * @param file 导出文件对象
     * @return 导出执行对象
     */
    public static ExcelExport2File with(File file) {
        return new ExcelExport2File(file);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy