java.nio.file.Исключение FileSystemException: C:test.csv -> C:test2.csv : Процесс не может получить доступ к файлу, потому что он используется другим процессом в java

#java #spring-boot #spring-batch

#java #spring-boot #spring-batch

Вопрос:

У меня есть пакет spring, здесь я извлекаю файлы из папки, а затем читаю файл с помощью библиотеки OpenCV, код выглядит следующим образом.

  List<SendingFile> sendCloudFile = new CsvToBeanBuilder<SendingFile>(new FileReader(file.getAbsolutePath(), StandardCharsets.UTF_8))
                        .withType(SendingFile.class)
                        .build()
                        .parse();
 

После этого, когда я пытаюсь удалить тот же файл, он выдает мне сообщение об ошибке. (Процесс не может получить доступ к файлу, потому что он используется другим процессом.)
Чего мне здесь не хватает?

 @Override
    public ExitStatus afterStep(StepExecution stepExecution) {
        if (stepExecution.getExitStatus().equals(ExitStatus.FAILED)) {
            service.updateErrorStatus(mailApplicationId, null, null);
        }
        for (Map.Entry<String, String> processedFile : processedFileList.entrySet()) {
            File newFile = new File(recoveryFolder, processedFile.getKey());
            try {
                Files.move(Paths.get(processedFile.getValue()), Paths.get(recoveryFolder, processedFile.getKey()), REPLACE_EXISTING);
            } catch (Exception ex) {
                log.warn("Error in moving the file. ");
                log.warn(ex.getMessage());
            }
        }
        return stepExecution.getExitStatus();
    }
 

Ответ №1:

Это известная проблема: https://github.com/spring-projects/spring-batch/issues/1500 .

Обходной путь — использовать другой шаг для перемещения файла вместо того, чтобы делать это в прослушивателе.