2016-12-10 12 views
1

Excelファイルを書き込むコードを実行しています。ただし、main関数の最後に作成されたファイルを開くと、Open Officeは未知のユーザーによってファイルがロックされているというエラーメッセージを表示します。私はチェックし、それはファイルとファイルを使用してブックへのすべての参照を閉じているようです。編集用にファイルがロックされています

ありがとうございました!

コードあなたは、あなたがそれで終わったときに明示的に(finallyブロックで)closeの方法で、ファイルを閉じるには覚えておく必要が

public class StandingsFile 
{ 
    private Workbook workbook; 

    public StandingsFile(InputStream inputStream, File outputFile) 
    { 
     this.outputFile = outputFile; 
     workbook = POIExcelFileProcessor.createWorkbook(inputStream); 
    } 

    public void write() 
    { 
     // Code where the sheets in the Excel file are modified 

     POIExcelFileProcessor.writeWorkbook(workbook, outputFile); 
    } 

    public static void main(String[] args) 
    { 
     standingsExcelFile = new StandingsFile(StandingsCreationHelper.class.getResourceAsStream(TEMPLATE_FILENAME), outputFile); 
     standingsExcelFile.write(); 

     try 
     { 
      Desktop dt = Desktop.getDesktop(); 
      dt.open(outputFile); 
     } 
     catch (Exception ex) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

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(); 
      workbook.close(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
+0

ここで、出力ストリームを閉じますか? –

+0

追加されたfileOut.close();それは今働くようです:)。 –

+0

私はそれがファイルをロックすることを知らなかった。あなたは答えとしてそれを追加することができます:)。 –

答えて

3

か試し-と、リソースを持ちますステートメント。

これは一般的なルールとして、POIを使用するだけではありません。

関連する問題