为 XLSX Apache poi 使用 Java 临时文件
using Java temporary file for XLSX Apache poi
.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);
}
//...
如果我使用真实文件,它工作正常。但对于临时文件,它不起作用。请帮我解决一下这个。谢谢
WorkbookFactory.create
API 需要一个支持标记或重置的 InputStream
。
您应该尝试使用 BufferedInputStream
。
请注意,建议使用 WorkbookFactory.create(java.io.File
文件,因为它占用的内存较小。
当您创建一个新文件时,您首先不需要一个文件,您可以从一个新的工作簿开始:
Workbook wb = new XSSFWorkbook();
然后使用 API 填充它。最后你可以通过
将它写入一个新文件
try (OutputStream stream = new FileOutputStream(file)) {
wb.write(stream);
}
.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);
}
//...
如果我使用真实文件,它工作正常。但对于临时文件,它不起作用。请帮我解决一下这个。谢谢
WorkbookFactory.create
API 需要一个支持标记或重置的 InputStream
。
您应该尝试使用 BufferedInputStream
。
请注意,建议使用 WorkbookFactory.create(java.io.File
文件,因为它占用的内存较小。
当您创建一个新文件时,您首先不需要一个文件,您可以从一个新的工作簿开始:
Workbook wb = new XSSFWorkbook();
然后使用 API 填充它。最后你可以通过
将它写入一个新文件try (OutputStream stream = new FileOutputStream(file)) {
wb.write(stream);
}