在java中如何解锁文件或写入由excel打开的文件

时间:2013-09-16 08:47:41

标签: java file fileoutputstream filelock

我目前正在编写一个输出到excel文件的程序。 (同样打开它读) 我觉得用户将在excel中打开文件,然后在我的应用程序中进行修改。 虽然我确实知道我可以保存一个不那么整洁的新文件。

我正在寻找一种从Excel解锁文件或强制写入文件的方法,请你帮忙吗?

我需要最终在Excel中打开文件的方式,并且仍然能够从java写入文件。

谢谢!

编辑:

要回答我为什么要解锁文件的问题,我正在处理的程序没有内置的excel查看器,只能基于标准化输入进行更新。

因此用户仍将在excel中查看该文件。 如果他们需要先打开这个程序,那也没关系。

我想另一个选择是如何打开具有写访问权限的文件,而Excel仍然可以读取它?

目前打开时我正在使用Apache POI HSSF / XSSF,一旦我的程序打开文件,如果我尝试在excel中打开它,我会收到以下错误:“Excel无法打开文件,因为文件格式无效。验证文件是否已损坏,以及文件扩展名是否与文件格式匹配。

2 个答案:

答案 0 :(得分:2)

文件锁定的理由很充分。试着从excel程序员的角度考虑问题。如果你编写一个锁定文件的程序,你想要对它进行独占访问,因为你必须确保同时不修改该文件。

因此,即使您可以解锁它,也可能导致excel,或者通常其他程序崩溃,因为它可能会以不一致的状态读取文件。

我建议您查看文件是否已锁定,如果是,请通知用户您要更新的文件在另一个程序中打开。用户应该在程序继续之前关闭此程序。

答案 1 :(得分:1)

在创建excel文件之前将文件写入为true,然后在创建excel文件时将文件设置为readonly:

try{
        File file = new File("\*path*\");
          file.setWritable(true);
            OutputStream out = new FileOutputStream(file.getPath());
            HSSFWorkbook wb=new HSSFWorkbook();
             //Create Excel File
            wb.write(out);
            out.close();
            file.setReadOnly();
}catch (FileNotFoundException e){
             e.printStackTrace();
               }

文件必须设置为readonly才能让java程序在文件打开时写入文件