Получение ошибки с Apachi POI в Java 10
Я сделал парсер, который читает таблицы Excel с помощью apache poi с java 9, и моя программа работает нормально, когда я экспортирую его в файл jar и запускаю на своем компьютере. Однако, когда я пытаюсь запустить программу с использованием Java 10, я получаю кучу ошибок, и он не читает файл вообще.
Я использую последнюю версию apache poi, и когда я запускаю приложение в java 9, я получаю предупреждающие сообщения, но программа по-прежнему работает без проблем. Это мои методы, которые я использую для создания файлов и передачи файла в метод open.
@FXML
public void handleFileButtonClick() throws Exception {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Please Select a SpreadSheet");
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("Excel files (*.xlsx)", "*.xlsx");
fileChooser.getExtensionFilters().add(extFilter);
File file = fileChooser.showOpenDialog(mainGridPane.getScene().getWindow());
if (file != null) {
open(file);
} else {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("File Not Found");
alert.setContentText("File was not found or cannot be read.");
alert.showAndWait();
}
}
private void open(File file) throws Exception {
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet spreadSheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = spreadSheet.iterator();
rowIterator.next();
rowIterator.next();
rowIterator.next();
rowIterator.next();
rowIterator.next();
while (rowIterator.hasNext()) {
row = (XSSFRow) rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
Job job = new Job();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
DataFormatter dataFormatter = new DataFormatter();
String cellStringValue = dataFormatter.formatCellValue(cell);
switch (cell.getColumnIndex()) {
case 0:
case 1:
break;
case 2:
if (!cellStringValue.equals("")) {
String[] date = cellStringValue.split("/");
LocalDate newDate = LocalDate.of(2000 + Integer.parseInt(date[2]), Integer.parseInt(date[0]), Integer.parseInt(date[1]));
job.setStartDate(newDate);
}
break;
case 3:
if (!cellStringValue.equals("")) {
String[] date2 = cellStringValue.split("/");
LocalDate newDate2 = LocalDate.of(2000 + Integer.parseInt(date2[2]), Integer.parseInt(date2[0]), Integer.parseInt(date2[1]));
job.setEndDate(newDate2);
}
break;
case 4:
if (!cellStringValue.equals("")) {
job.setTotalDaysPaid(Integer.parseInt(cellStringValue));
}
break;
case 5:
break;
case 6:
if (!cellStringValue.equals("")) {
String[] date3 = cellStringValue.split("/");
LocalDate newDate3 = LocalDate.of(2000 + Integer.parseInt(date3[2]), Integer.parseInt(date3[0]), Integer.parseInt(date3[1]));
job.setNextYearStart(newDate3);
}
break;
case 7:
if (!cellStringValue.equals("")) {
String[] date4 = cellStringValue.split("/");
LocalDate newDate4 = LocalDate.of(2000 + Integer.parseInt(date4[2]), Integer.parseInt(date4[0]), Integer.parseInt(date4[1]));
job.setNextYearEnd(newDate4);
}
break;
default:
break;
}
}
if (job.getStartDate() != null) {
jobs.add(job);
}
}
workbook.close();
}
2 ответа
Согласно: https://poi.apache.org/faq.html "24. Может ли Apache POI быть скомпилирован / использован с Java 10 или новее? Apache POI еще не полностью поддерживается в Java 10 или новее. Бинарные форматы (.xls, .doc, .ppt, ...) в основном должны работать, но, к сожалению, чтение новых форматов на основе XML (.xlsx, .docx, pptx, ...) нарушается изменением Обработка ZIP-файлов в Java 10, подробности и новейшее состояние см. В сообщении об ошибке 62187."
Я думаю, что вы нашли ошибку, вам придется немного покопаться в ее статусе.