У меня есть скрипт bash в Linux (CentOS), который перенаправляет вывод в файл. Запуск занимает несколько минут:

./myBashScript.sh >> file.csv

У меня есть Java-приложение, которое пытается прочитать файл (только чтение) для дальнейшей обработки:

    File file = new File("file.csv");
            Scanner input = new Scanner(file);
            while (input.hasNextLine()) {
                String line = input.nextLine();
                // do something...
            }

Эти процессы находятся на Crontab . Все работает нормально, но, очевидно, всякий раз, когда скрипт bash перенаправляет вывод в файл, приложение Java не может его прочитать. Журналы показывают исключение "File not found" !

Файл заблокирован ?! Как я могу решить проблему?

1 ответ1

1

Попробуйте / поймать и повторить попытку ... Блокировка существует по причине. Если файл все еще пишется, вы не хотите его читать. Даже если это возможно, будет хотя бы один случай, когда ваш Java-код считает, что он прочитал весь файл, когда генерация CSV еще не завершена.

На самом деле ваш код опасен, файл, скорее всего, закрыт между двумя командами оболочки, которые к нему добавляются, поэтому ваш код Java может открывать и блокировать файл для себя во время выполнения сценария оболочки.

Итак, либо запустите код Java после того, как файл полностью сгенерирован, либо, если код Java наблюдает за файлом, сгенерируйте файл под временным именем, а затем переименуйте его в ожидаемое имя, как только это будет сделано.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .