2016-10-05 4 views
0

Я пишу в существующий файл excel с использованием Java, скажем, что это файлA. (Я использую APACHE POI для этого.) Возможно, что файл excelA открывается кем-то. Он сохраняется в общей папке, доступ к которой осуществляется множеством людей.Закрепить файл excel перед его записью

Я хочу, чтобы избежать столкновения

java.io.FileNotFoundException: (Процесс не может получить доступ к файлу , так как он используется другим процессом)

Потому что независимо от того, если существующий файл excel открыт или нет, мне нужно сохранить вывод моего приложения Java.

При исследовании, я думаю, что невозможно закрыть fileA (открытый другим процессом/пользователем, а не моим Java-приложением) в моем Java-коде.

Что я сейчас делаю, это создать новый файл excel, скажем fileB, если файлA открыт. Я использую код ниже. Файл файла = null;

FileOutputStream out = null; 

    int workbookNo = 0; 
    do{ 
     String append = ""; 
     if(workbookNo != 0){ 
      append = "_Copy" + Integer.toString(workbookNo); 
     } 
     file = new File(filePath + "ValidateLock_" + dataDate + append + ".xlsx"); 

     try{ 
      out = new FileOutputStream(file); 
      workbookNo = 0; 
     }catch(FileNotFoundException e){ 
      //e.printStackTrace(); 
      workbookNo++; 
     } 
    }while(workbookNo != 0); 

Однако, я получаю сообщение об ошибке ниже.

org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException: Нет допустимые значения или содержимое не найдено, это не является допустимым OOXML (Office Open XML ) файл

+2

И какая линия производит это исключение? –

+0

Вы пытались использовать Apache POI 3.15? У него лучшие сообщения об ошибках для общих ошибок пользователя в отношении сломанных или пустых файлов - все – Gagravarr

+0

Вы пытались копировать файлы в песочницу, недоступную другим пользователям (либо в памяти с потоком ByteArray, либо на локальном диске, компьютер или приложение имеют доступ), а затем копирование файлов обратно на сетевой диск, когда вы закончите? – IceArdor

ответ

0

попробовать так:

try { 
       FileInputStream file = new FileInputStream(new File("C:\\update.xls")); 

       HSSFWorkbook workbook = new HSSFWorkbook(file); 
       HSSFSheet sheet = workbook.getSheetAt(0); 
       Cell cell = null; 

       //Update the value of cell 
       cell = sheet.getRow(1).getCell(2); 
       cell.setCellValue(cell.getNumericCellValue() * 2); 
       cell = sheet.getRow(2).getCell(2); 
       cell.setCellValue(cell.getNumericCellValue() * 2); 
       cell = sheet.getRow(3).getCell(2); 
       cell.setCellValue(cell.getNumericCellValue() * 2); 
    //Close the excel input file (inputstream) 
       file.close(); 

       FileOutputStream outFile =new FileOutputStream(new File("C:\\update.xls")); 
       workbook.write(outFile); 
//Close output excel file 
       outFile.close(); 

      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
Смежные вопросы