2016-12-10 7 views
1

Я делаю код, который записывает файл Excel. Однако при открытии файла, созданного в конце функции main, Open Office выводит сообщение об ошибке, что файл заблокирован неизвестным пользователем. Я проверил, и кажется, что я закрываю все ссылки на файл и книгу, используя файл.Файл заблокирован для редактирования

Заранее благодарим за любую помощь!

Код

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

Добавлен файлOut.close(); и, похоже, теперь это работает :). –

+0

Я не знал, что это заблокирует файл. Вы можете добавить его в качестве ответа :). –

ответ

3

Вы должны помнить, чтобы закрыть файл, когда вы закончите с этим, либо явно с close методом (в finally блоке) или с примерки с-ресурсами заявление.

Это правило, как правило, не только для использования POI.

Смежные вопросы