【发布时间】:2016-01-27 16:53:26
【问题描述】:
我有一个 Excel,我想在每个分叉进程正在读取和写入它时锁定它。 Apache poi 要求我使用FileInputStream 和FileOutputStream 来读取和写入该文件,但是我看到的所有锁定文件以进行读取和写入的示例都使用RandomAccessFile,但是当我这样做时,当我打电话给workbook.write(os); 我得到一个
org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException 和 excel 损坏。以下是部分代码:
try {
RandomAccessFile raf = new RandomAccessFile(path,"rw");
FileChannel channel = raf.getChannel();
FileLock lock = channel.lock(0L,Long.MAX_VALUE,true);
FileInputStream is = new FileInputStream(path);
XSSFWorkbook workbook = new XSSFWorkbook(is);
XSSFSheet sheet = workbook.getSheet(env.toUpperCase());
Iterator<Row> rowIterator = sheet.iterator();
//skip headers
rowIterator.next();
while (rowIterator.hasNext())
{
//reading and editing values in excel
}
is.close();
FileOutputStream os = new FileOutputStream(path);
workbook.write(os);
workbook.close();
os.close();
lock.release();
channel.close();
raf.close();
}
【问题讨论】:
标签: java apache-poi filelock