使用Java临时文件进行XLSX Apache poi

时间:2017-08-24 06:40:37

标签: java excel apache-poi xlsx temporary-files

.hi,我正在尝试创建一个临时的.xlsx文件并使用apache poi写入它。我正在获取EmptyFileException来创建工作簿。这是代码:

public class Writer{
File file;
public File Write(List<FormData> l, Class elementClass)
{

    try {//create temp fiele here
        file = File.createTempFile(elementClass.getSimpleName(),".xlsx");
    } catch (IOException ex) {
        Logger.getLogger(Writer.class.getName()).log(Level.SEVERE, null, ex);
    }
    XSSFWorkbook workbook;
    XSSFSheet sheet;
    if (file.exists()) {
        FileInputStream inputStream;
        try {
            inputStream = new FileInputStream(file);
        } catch (FileNotFoundException ex) {
            throw new AspirinException(AspirinException.Type.INTERNAL_ERROR);
        }
        try {// this line gets error//
            workbook = (XSSFWorkbook) WorkbookFactory.create(inputStream);
        } catch (IOException | InvalidFormatException | EncryptedDocumentException ex) {
            throw new AspirinException(AspirinException.Type.INTERNAL_ERROR);
        }

        //...

如果我使用真实文件,它可以正常工作。但对于临时文件,它不起作用。请帮我解决一下这个。感谢

2 个答案:

答案 0 :(得分:1)

创建新文件时,首先不需要文件,只需从新工作簿开始:

Task

然后使用API​​填充它。最后,您可以通过

将其写入新文件
Workbook wb = new XSSFWorkbook();

答案 1 :(得分:0)

WorkbookFactory.create API需要InputStream,支持标记或重置。 您应该尝试使用BufferedInputStream。 请注意,建议使用WorkbookFactory.create(java.io.File文件,因为它的内存占用量较小。