【问题标题】:In java how can I unlock a file or write to a file opened by excel在java中如何解锁文件或写入excel打开的文件
【发布时间】:2013-09-16 08:47:41
【问题描述】:

我目前正在编写一个输出到 excel 文件的程序。 (它读取的相同打开) 我有一种感觉,用户会在我的应用程序中修改之前在 excel 中打开文件。 虽然我确实意识到我可以保存一个不那么整洁的新文件。

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

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

谢谢!

编辑:

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

因此用户仍将在 excel 中查看文件。 如果他们需要先打开这个程序也可以。

我想另一种选择是如何在 Excel 仍然可以读取的情况下以写入权限打开文件?

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

【问题讨论】:

  • 您想要解锁文件的原因是开始提问的一种好方法。
  • 操作系统不允许。在 Java 中你无能为力。

标签: java file fileoutputstream filelock


【解决方案1】:

文件被锁定是有充分理由的。试着从excel程序员的角度去思考问题。如果你编写了一个锁定文件的程序,你想要独占访问它,因为你必须确保文件同时没有被修改。

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

如果文件被锁定,我建议您查看文件,如果是,请通知用户您要更新的文件已在另一个程序中打开。用户应先关闭此程序,然后您的程序才能继续运行。

【讨论】:

    【解决方案2】:

    在创建 excel 文件之前将文件可写设置为 true,然后在创建 excel 文件后将文件设置为只读,如下所示:

    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();
                   }
    

    文件必须设置为只读,以便java程序在文件打开时写入文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 2019-10-14
      相关资源
      最近更新 更多