Try / Catch не активируется при ошибке при попытке открыть книгу Excel - PullRequest
0 голосов
/ 06 сентября 2018

Использование apache-POI, чтобы открыть книгу Excel или создать ее, если она не существует. По какой-то причине открываемая книга была повреждена, что вызвало ошибку в строке с комментарием об ошибке.

Каким-то образом попытка / уловка этого раздела кода, похоже, не активировалась. Любые идеи, почему и как я мог правильно обрабатывать такие ошибки? Кроме того, есть ли способ проверить целостность файла во время моего if(file.exists() && file.length() != 0) { условия?

public XSSFWorkbook OpenWB(String directory, String name) {
      File file = new File(directory + "\\" + name + ".xlsx");
      FileInputStream fIP;

      if(file.exists() && file.length() != 0) {
        try {
            fIP = new FileInputStream(file);
            //Get the workbook instance for XLSX file 
             workbook = new XSSFWorkbook(fIP); //*********error occurs here**********
             fIP.close();
             System.out.println(name + ".xlsx file open successfully.");
             return workbook;
        } catch (IOException e) {
            e.printStackTrace();
             System.out.println("Error to open " + name + ".xlsx file, creating blank");
              //Create Blank workbook
              workbook = new XSSFWorkbook(); 
              Integer i = 0;
              while (file.isFile() && file.exists()) {
                  name = name.concat(i.toString());
                  file = new File(directory + "\\" + name + ".xlsx");
                  i++;
              }
              return workbook;
        }
      } else {
         System.out.println("Error to open " + name + ".xlsx file, creating blank");
          //Create Blank workbook
          workbook = new XSSFWorkbook(); 
          return workbook;
      }
}   

1 Ответ

0 голосов
/ 07 сентября 2018

Попробуйте этот кусок кода, и он выдаст вам ошибку "Ошибка открытия файла random.xlx, создание пустого" , что означает, что ваш try catch работает. вы забыли инициализировать вашу переменную "workbook", кажется.

      package stackoverflow;
      import java.io.File;
      import java.io.FileInputStream;
      import java.io.IOException;

      import org.apache.poi.xssf.usermodel.XSSFWorkbook;

      public class Solution {
      public XSSFWorkbook OpenWB(String directory, String name) {
      File file = new File(directory + "\\" + name + ".xlsx");
      FileInputStream fIP;

      XSSFWorkbook workbook;
     if(file.exists() && file.length() != 0) {
        try {
            fIP = new FileInputStream(file);
            //Get the workbook instance for XLSX file 
             workbook = new XSSFWorkbook(fIP); //*********error occurs here**********
             fIP.close();
             System.out.println(name + ".xlsx file open successfully.");
             return workbook;
        } catch (IOException e) {
            e.printStackTrace();
             System.out.println("Error to open " + name + ".xlsx file, creating blank");
              //Create Blank workbook
              workbook = new XSSFWorkbook(); 
              Integer i = 0;
              while (file.isFile() && file.exists()) {
                  name = name.concat(i.toString());
                  file = new File(directory + "\\" + name + ".xlsx");
                  i++;
              }
              return workbook;
        }
      } else {
         System.out.println("Error to open " + name + ".xlsx file, creating blank");
          //Create Blank workbook
          workbook = new XSSFWorkbook(); 
          return workbook;
      }
}  
public static void main(String args[]) {
    Solution s = new Solution();
    s.OpenWB("D://", "random.xlx");
}
 }

вы можете изменить часть класса Solution в соответствии с вашими потребностями.

...