gpt4 book ai didi

java - 使用 FileInputStream、FileOutputStream 和 RandomAccessFile 锁定 XLSX 文件的读写

转载 作者:行者123 更新时间:2023-11-30 03:04:51 26 4
gpt4 key购买 nike

我有一个 Excel,我想在每个 fork 进程读取和写入它时将其锁定。 Apache poi 要求我使用 FileInputStreamFileOutputStream 来读取和写入该文件,但是我见过的用于锁定文件进行读取和写入的所有示例都使用 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();

}

最佳答案

不要在实际共享文件上使用 RandomAccessFileFileChannelFileLock,而是尝试创建并锁定一个单独的虚拟文件。这样,成功的进程就不会在 Excel 文件上看到异常锁定或其他 Activity 。

关于java - 使用 FileInputStream、FileOutputStream 和 RandomAccessFile 锁定 XLSX 文件的读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35043382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com