Try/Catch не активируется при ошибке, пытающейся открыть Excel Workbook

116
8

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

Как-то попытка try/catch вокруг этого раздела кода, похоже, не активировалась. Любые идеи, почему и как я мог правильно обрабатывать такие ошибки? Кроме того, есть ли способ проверить целостность файла во время моего 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;
}
}

спросил(а) 2021-01-25T18:19:56+03:00 4 месяца, 2 недели назад
1
Решение
76

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

      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");
}
}

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

ответил(а) 2021-01-25T18:19:56+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема