環境

  • Apache POI 3.17
  • JDK 1.8.0_162
  • Excel 2016

やりたいこと

Apache POIで、Excelファイルを読み込む機能があります。
以下のようなコードです。

public static void read(File file) throws IOException, InvalidFormatException {
    Workbook workbook = WorkbookFactory.create(file);
    Sheet sheet = workbook.getSheetAt(0);
    //セルの中身を読み取る処理
    workbook.close();
}

今、このメソッドのテストコードを作成したいです。
テストデータ用のExcelファイルも、リポジトリに登録します。

問題

上記のメソッドでExcelファイルを読み込むと、Excelファイルが更新され、リポジトリに登録してあるExcelファイルと差分が出てしまいます。

詳細事項

差分の内容

空のExcelファイル(新規作成時のファイル)を使って、cmpコマンドでバイナリ差分を確認しました。

$ cmp -b sample-after.xlsx sample4-before.xlsx
sample-after.xlsx sample4-before.xlsx differ: byte 7, line 1 is  12 ^J   6 ^F
  • sample-before.xlsx : テストコード実行前のExcelファイル
  • sample-after.xlsx : テストコード実行後のExcelファイル

closeメソッド

closeメソッドの呼び出さなければ、Excelファイルは更新されませんでした。

質問

  • 上記のコードで、なぜExcelファイルが更新されるのでしょうか?
  • Excelファイルのどういった情報が、更新されているのでしょうか?
  • Excelファイルが更新されないように、読み込む方法はありますか?あれば、その方法を教えていただきたいです。(closeメソッドを呼ばないは除外)