2016-12-22 32 views
0

Excelファイルを作成するテストをJUnitで実行していて、これをベンチマークファイルと比較します。Java POI - 同じパラメータを使用してExcelファイルを作成すると、異なるファイルが生成される

しかし、テストするとき、両方のファイルが等しいかどうかを比較すると常にfalseが返されます。だから私は、同じファイルを作成する非常にサンプルコードを試してみましたが、別の場所へ:

コード

@Test 
public void testWrite() throws SQLException, IOException 
{ 
    File createdFile = folder.newFile("myfile.xlsx"); 
    File createdFile2 = folder.newFile("myfile2.xlsx"); 

    // Same file created but using two different file names 
    FormFile tester = new FormFile(createdFile, "Harvard"); 
    tester.write(); 

    tester = new FormFile(createdFile2, "Harvard"); 
    tester.write(); 

    // Always return false 
    assertEquals(FileUtils.contentEquals(createdFile, createdFile2), true); 
} 

public class FormFile 
{ 

    private File file; 
    private String schoolName; 

    public FormFile(File file, String schoolName) 
    { 
     this.file = file; 
     this.schoolName = schoolName; 
    } 

    workbook = POIExcelFileProcessor.createWorkbook(FormFileTest.class.getResourceAsStream(FORM_FILE_TEMPLATE_FILENAME)); 

    // Code to modify the workbook 

    POIExcelFileProcessor.writeWorkbook(workbook, file); 
} 

public class POIExcelFileProcessor 
{ 

    public static Workbook createWorkbook(InputStream inputStream) 
    { 
     Workbook workbook = null; 

     try 
     { 
      workbook = WorkbookFactory.create(inputStream); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

     return workbook; 
    } 

    public static void writeWorkbook(Workbook workbook, File outputFile) 
    { 
     try 
     { 
      FileOutputStream fileOut = new FileOutputStream(outputFile); 
      workbook.write(fileOut); 

      fileOut.flush(); 
      fileOut.close(); 
      workbook.close(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

であっても(ここでは、文字列「ハーバード」)と同じパラメータを使用して、両方のファイル内容はまだ同じではなく、なぜ私は考えていません。

ありがとうございます!

+3

なぜいくつかのExcelファイルは、同じコンテンツを持つ別のExcelファイルと同等の「ビット単位」であると思いますか? –

+0

私はプログラミングが比較的新しいですが、私は考えることができます:それはなぜでしょうか? Excelはタイムスタンプやその他の関連しない文字のようないくつかの文字を追加しますか? –

+1

私はExcelのファイルを使用していますが、Microsoftからかなり閉鎖された形式であることを知っています。私はPOIファイルを読み込み、セル(+ヘッダフッタ形式など)でコンテンツセルを比較します。 –

答えて

2

作成できる最も簡単なスプレッドシートには、作成された日付のタイムスタンプがあります。

import java.io.FileOutputStream; 
import java.io.IOException; 

import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

public class SimpleSheet { 

    public static void main(String[] args) throws IOException { 
     Workbook wb = new XSSFWorkbook(); 
     Sheet sh1 = wb.createSheet("Sheet1"); 
     Row r = sh1.createRow(0); 
     Cell c = r.createCell(0); 
     c.setCellValue("Test"); 

     // Write the output to a file 
     String file = "simple-poi.xlsx"; 
     FileOutputStream out = new FileOutputStream(file); 
     wb.write(out); 
     out.close(); 
     wb.close(); 
     System.out.println("Generated: " + file); 
    } 

} 

このコードを実行し、ファイルの名前を* .zipに変更します。 xmlファイルを見ることができます。 docProps/core.xmlを見ると、タイムスタンプが表示されます。コードで作成した2つのファイルの名前を.zipに変更し、各アーカイブ内の同じファイルを確認します。これはおそらくあなたの2つのファイルの間で異なる唯一のものです。

+0

非常に明確な答えは、ありがとう。 –

関連する問題