Как обработать неполные файлы? Получение исключения

Убедитесь, что у вас установлена ​​последняя версия npm.

npm install npm@latest -g

Если это все еще не работает, вы можете попробовать удалить node_modules и запустить npm install снова

rm -Rf node_modules
npm install
8
задан Bob Gilmore 8 October 2012 в 23:21
поделиться

6 ответов

Tha самый безопасный путь должен загрузить файл на другое местоположение и затем переместить его в целевую папку.

Другое изменение, упомянутое Мороженым, должно изменить имя файла на некоторое другое расширение после загрузки и искать только файлы с тем расширением.

4
ответ дан 5 December 2019 в 12:13
поделиться

Вы могли попробовать разные вещи:

  • Неоднократно проверяйте дату последнего изменения и размер файла, пока это больше не изменяется для данного количества времени, затем обработайте его. (Как указано qbeuek это не безопасно и не детерминировано.)
  • Только обработайте файлы с именами, которые соответствуют определенным критериям (например, *.dat). Измените процесс загрузки/загрузки FTP, чтобы загрузить/загрузить файлы с другим именем (например, *.dat.temp) и переименовать файлы, после того как они завершены.
  • Загрузите файлы на другое местоположение и переместите их в Ваш каталог обработки, после того как они завершены.
  • Как сказанный Уксус, если это не работает в первый раз, попробовали еще раз позже.:)
3
ответ дан 5 December 2019 в 12:13
поделиться

Я только считал файл, который не находится в режиме записи. Это является самым безопасным, поскольку это означает, что никакой другой процесс не пишет в этом файле. Можно проверить, не находится ли файл в режиме записи при помощи canWrite метода класса Файла.

Это решение хорошо работает для меня, поскольку у меня также есть тот же самый сценарий Вы направление.

4
ответ дан 5 December 2019 в 12:13
поделиться

Если Вы имеете некоторый контроль на процессе, который делает FTP, у Вас мог потенциально быть он, создают "файл флага" в исходном каталоге сразу ПОСЛЕ ТОГО, КАК ftp для большого файла закончен.

Затем Ваш поток Java должен проверить присутствие этого файла флага, если это присутствует затем существует файл, готовый быть обработанным в исходном каталоге. Прежде, чем обработать большой файл, поток должен удалить файл флага.

Файл флага может быть чем-либо (даже пустой файл).

2
ответ дан 5 December 2019 в 12:13
поделиться

Принятие Вас не имеет никакого контроля над процессом FTP...

Позвольте ему быть похожим на это. Когда Вы получите исключение, затем попытайтесь обработать его снова в следующий раз. Повторите его, пока файл не будет обработан. Его польза для хранения немногих атрибутов в случае исключения для проверки его позже, как; имя, измененное в последний раз, размер.

Проверьте точное исключение прежде, чем решить обработать его позже, исключение могло бы произойти по некоторой другой причине.

1
ответ дан 5 December 2019 в 12:13
поделиться

Если Вашей ОС является Linux и Ваше ядро> 2.6.13, Вы могли бы использовать уведомление о событии файловой системы API, названный inotify. Здесь существует реализация Java: https://bitbucket.org/nbargnesi/inotify-java.

Вот пример кода (в большой степени вдохновлен веб-сайтом).

        try {
        Inotify i = new Inotify();
        InotifyEventListener e = new InotifyEventListener() {

            @Override
            public void filesystemEventOccurred(InotifyEvent e) {
                System.out.println("inotify event occurred!");
            }

            @Override
            public void queueFull(EventQueueFull e) {
                System.out.println("inotify event queue: " + e.getSource() +
                        " is full!");
            }

        };
        i.addInotifyEventListener(e);
        i.addWatch(System.getProperty("user.home"), Constants.IN_CLOSE_WRITE);
    } catch (UnsatisfiedLinkError e) {
        System.err.println("unsatisfied link error");
    } catch (UserLimitException e) {
        System.err.println("user limit exception");
    } catch (SystemLimitException e) {
        System.err.println("system limit exception");
    } catch (InsufficientKernelMemoryException e) {
        System.err.println("insufficient kernel memory exception");
    }
0
ответ дан 5 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: