ted*_*ted 15 file-io apache-poi
我使用了构建了一个新的工作簿WorkbookFactory.create(new File("path/to/xlsx")).但是,当我尝试在启动应用程序后在Excel中编辑文件时,我收到一条错误消息,指出该文件正在使用中.我是否必须释放文件,如果是,如何?(我Workbook.close()在api文档中找不到任何内容)或者我必须在其他地方查找?
我不知道在哪里可以看; 应用程序不会导致csv和excel文件的这些问题我只是调用转换器(xls => csv),这是唯一的区别.
(我正在使用POI 3.8)
Mar*_* T. 17
似乎可以很好地维护传递给InputStream的句柄WorkbookFactory.create(),并在完成工作簿时简单地关闭InputStream.例如:
InputStream is = // initialize
try {
Workbook wb = WorkbookFactory.create(is);
// use the workbook
} finally {
if (is != null) is.close()
}
Run Code Online (Sandbox Code Playgroud)
Gag*_*arr 10
如果您需要完全控制资源何时关闭,您应该自己创建OPCPackage,并将其传递给WorkbookFactory.OPCPackage提供了您所追求的密切方法.在收集垃圾之前,工作簿将保持打开状态
您的代码看起来像:
File f = new File("/path/to/excel/file");
Workbook wb = null;
NPOIFSFileSystem npoifs = null;
OPCPackage pkg = null;
try {
npoifs = new NPOIFSFileSystem(f);
wb = WorkbookFactory.create(npoifs);
} catch(OfficeXmlFileException ofe) {
pkg = OPCPackage.open(f);
wb = WorkbookFactory.create(pkg);
}
// Use it
if (npoifs != null) { npoifs.close(); }
if (pkg != null) { pkg.close(); }
Run Code Online (Sandbox Code Playgroud)