powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / доступ к файлу
25 сообщений из 90, страница 2 из 4
доступ к файлу
    #39485299
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема без ответа
http://www.cyberforum.ru/java-j2se/thread1215925.html
...
Рейтинг: 0 / 0
доступ к файлу
    #39485309
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНам по хорошему нужно реагировать на закрытие (CLOSE) файла после копирования. Я ищу в спеках WatchService но ничего не нахожу.
Потому что нет его: https://msdn.microsoft.com/en-us/library/windows/desktop/aa364391(v=vs.85).aspx
...
Рейтинг: 0 / 0
доступ к файлу
    #39485311
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
да кстати я забыл выложит нужные файлы тоже чтоб вы посморели итоговый файл...

кстати все таки уважаемый Dimitry Sibiryakov говорил на счет копирования...

а на счет canRead и canWrite можно их убрать все равно такая ситуация будет, там только изза do while программа не падает а так падал бы
...
Рейтинг: 0 / 0
доступ к файлу
    #39485313
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут внутри 3 файла
...
Рейтинг: 0 / 0
доступ к файлу
    #39485413
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарприкол в том что иногда я получаю эксепшн иногда все гладко идет...А что за приложение, которое создает/копирует файлы в эту папку? Вами разработана?
...
Рейтинг: 0 / 0
доступ к файлу
    #39485418
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раскомментарил типы событий. Понаблюдал за событиями от вотчера.

Если мы копируем файл ненулевой длины то получаем:
1) Одно событие ENTRY_CREATE
2) Пакет событий ENTRY_MODIFY

Вобщем-то мой поинт в том что нужно завести какую-то служебную структуру
тира Map<File,State> и фиксировать статус файла.

На каждое событие обновлять статус. И если детектирован факт перехода
с ENTRY_MODIFY файла X на ENTRY_CREATE файла Y то мы (условно)
считаем что файл Х завершил свою дозапись (append).

Мой поинт основан на предположении что файловые блокировки
дороже стоят и нам лучше их использовать по минимуму.

Еще один поинт. В силу сложности организации самого процесса
вотчинга (сопряжение с файловой системой) и много шумящих
событий мы никогда не добъемся отсуствия IOExceptions. Они
всегда будут. Но мы сможем снизить их вероятность.

И последний поинт. Это уже относится к процессу который
создает html файлы. Его можно сделать так чтобы он
создавал файлы с расширением *.$$$ а после финализации
переименовывал в html. Этот хинт часто используют в Linux
для достижения определенной атомарности файловых
событий и для защиты от случайного захвата скриптом
недописанного архива (к примеру).
...
Рейтинг: 0 / 0
доступ к файлу
    #39485438
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот жеж люди ...
Умный человек уже сказал что делать: создать, заполнить, закрыть, переименовать (переместить).
Но, блин, мы вы создадим кучу костылей, но не будем делать правильно.
...
Рейтинг: 0 / 0
доступ к файлу
    #39485442
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovВот жеж люди ...
Умный человек уже сказал что делать: создать, заполнить, закрыть, переименовать (переместить).
Но, блин, мы вы создадим кучу костылей, но не будем делать правильно.
ты почитай внимательно, прежде чем высказываться.
...
Рейтинг: 0 / 0
доступ к файлу
    #39485448
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanА что за приложение, которое создает/копирует файлы в эту папку? Вами разработана?

это левая даже можно сказать основная корпоративная система из далеких 70-80х...

mayton, это все ради того что Вы опасаетесь, что процесс (ОС) может не давать разрешение и я не выхожу из цикла?

но если счетчик то: с одной стороны тоже можно, но мы может и никогда не получим нужную инфу а это совсем не есть хорошо мне кажется, т.е. это будет последней точкой для проекта, т.к. не годный... думаю тоже не айс.
...
Рейтинг: 0 / 0
доступ к файлу
    #39485450
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИ последний поинт. Это уже относится к процессу который
создает html файлы. Его можно сделать так чтобы он
создавал файлы с расширением *.$$$ а после финализации
переименовывал в html. Этот хинт часто используют в Linux
для достижения определенной атомарности файловых
событий и для защиты от случайного захвата скриптом
недописанного архива (к примеру).

кстати это тестовый модуль и в конечном продукте я не создам файл хтмл или ещё что то, после парсинга адресату вышлю/покажу ответ в табличном виде...
...
Рейтинг: 0 / 0
доступ к файлу
    #39485754
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonесли детектирован факт перехода
с ENTRY_MODIFY файла X на ENTRY_CREATE файла Y то мы (условно)
считаем что файл Х завершил свою дозапись (append).
А потом в каталог приходят два писателя и мы опять удивляемся почему у нас в файле только половина содержимого.
...
Рейтинг: 0 / 0
доступ к файлу
    #39485840
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из сказанных сделал пока так...
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
boolean b;
int i = 0;
do {
    Thread.sleep(1000);
    System.out.println("size " + f.length());
    b = true;
    try (FileInputStream fis = new FileInputStream(f)) {
        System.out.println("Файл обрабатывается!");
        readingFile(eventDir + "\\" + eventPath);
        break;
    } catch (IOException ex) {
        i++;
        if (i < 10) {
            System.out.println("Файл занят " + ex);
            b = false;
        } else {
            System.out.println("Повторите попытку позже, т.к. " + ex.getMessage());
            break;
        }
    }
} while (!b);
...
Рейтинг: 0 / 0
доступ к файлу
    #39485890
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарэто левая даже можно сказать основная корпоративная система из далеких 70-80х...будет круто, если получится подрубиться прямо к базе той системы... такое ощущение, что это просто экспорт табличных данных в файл
...
Рейтинг: 0 / 0
доступ к файлу
    #39486114
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanбудет круто, если получится подрубиться прямо к базе той системы... такое ощущение, что это просто экспорт табличных данных в файл

Да было бы круто но вот система вообще не использует субд, прямого доступа к систему не имеется и работаю через так называемый концентратор...
...
Рейтинг: 0 / 0
доступ к файлу
    #39486204
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что то все замолчали...
...
Рейтинг: 0 / 0
доступ к файлу
    #39486213
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарчто то все замолчали...
Решение через Thread.sleep() плохо тем что оно кушает потоки. Если вы используете пул в 10 потоков для обработки входящих файлов, то 10 файлов достаточно чтобы ваш пул усыпить на довольно продолжительное время.
...
Рейтинг: 0 / 0
доступ к файлу
    #39486229
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музафар мне щас некогда я убегаю. Несколько поинтов:

1) Мы обрабатываем события файловой системы медленнее чем они поступают.
Это не есть гуд т.к. будут потери событий (там есть спец константа для этого)
либо (возможно) будет другая ситуация. Тебе и участникам топика надо выкурить док по Watcher полностью.

2) Я-бы предложил обрабатывать события в Executor. Но перед этим события должны
пройти некую умную фильтрацию о которой я писал выше. Тоесть убрать "дребезг"
или многократное срабатывание ENTRY_MODIFY.

Вечером продолжим.
...
Рейтинг: 0 / 0
доступ к файлу
    #39486314
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczРешение через Thread.sleep() плохо тем что оно кушает потоки. Если вы используете пул в 10 потоков для обработки входящих файлов, то 10 файлов достаточно чтобы ваш пул усыпить на довольно продолжительное время.

а TimeUnit.SECONDS.sleep(); ? или это тоже самое?
...
Рейтинг: 0 / 0
доступ к файлу
    #39486325
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффара TimeUnit.SECONDS.sleep(); ? или это тоже самое?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
ScheduledExecutedService scheduler = ...

try {
    processFile(file);
} catch (Exception e) {
    log.error(e);
    if(errorCount < threshold) scheduler.schedule(this, delay, timeUnit);
}



Таким нехитрым способом вы не усыпляете потоки почем зря. А в случае ошибки закидываете задачу в очередь, а поток может заняться обработкой других файлов.
...
Рейтинг: 0 / 0
доступ к файлу
    #39486365
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

спасибо за советы, кстати после анализа я так понял что мне достаточно секунда задержки чтоб система разлочил копируемый файл...
...
Рейтинг: 0 / 0
доступ к файлу
    #39486366
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczТаким нехитрым способом вы не усыпляете потоки почем зря. А в случае ошибки закидываете задачу в очередь, а поток может заняться обработкой других файлов.
Я бы даже вообще все файлы сначала в executor пулял, чтобы дать время завершить запись.
...
Рейтинг: 0 / 0
доступ к файлу
    #39486987
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А потом в каталог приходят два писателя и мы опять удивляемся почему у нас в файле только половина содержимого.
Замечание ценное. И справедливое. Выше я уже упоминал что на интерфейсе Watcher мы не сможем
100% точно отработать событие ::close() и нам придется делать несколько "пристрелочных" выстрелов
по файлу с целью поймать состояние когда он уже финализирован.

Еще.

До того как начнет работать HtmlParser я-бы предложил в целях оптимизации прогнать валидатор.
Это новая алгоритмическая сущность которую нужно создать. Валидация будет проходить по критериям
- размер файла (мы не будем брать в обработку файлы меньше 2Кб к примеру)
- простейшая проверка на консистентность (для html-файла к примеру это наличие финализирующего тега </html>)

Если файл не проходит валидацию то мы откладываем его парсинг на некоторое время. Предполагается
что внешний процесс еще пишет этот файл.

Еще. Блажкович предложил делать таймаут перед повторной обработкой файла с ScheduledExecutedService.
Я-бы предложил ввести опцию "растущего таймаута" по экспоненте. Данная опция позволит не "долбить"
по очень длинным и часто изменяющимся файлам (два процесса сливают два лога) а просто отодвинуть
их обработку на потом в связи с неудачами.
...
Рейтинг: 0 / 0
доступ к файлу
    #39487101
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

мне кажется что Вы взялись на проблему очень глобально... это конечно радует но и пугает...

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

авторДо того как начнет работать HtmlParser я-бы предложил в целях оптимизации прогнать валидатор.
Это новая алгоритмическая сущность которую нужно создать. Валидация будет проходить по критериям
- размер файла (мы не будем брать в обработку файлы меньше 2Кб к примеру)
- простейшая проверка на консистентность (для html-файла к примеру это наличие финализирующего тега </html>)

придется брать файлов меньше 2КБ :) и файлы не более чем 1МБ (если я не ошибаюсь)
второго я не совсем понял при чем тут хтмл файл?

авторЕсли файл не проходит валидацию то мы откладываем его парсинг на некоторое время. Предполагается
что внешний процесс еще пишет этот файл.
и не легче ли просто ждать скажем 1секунд перед началом парсинга и после появлении файла как предлагал Блазкович?
...
Рейтинг: 0 / 0
доступ к файлу
    #39487105
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как вы переименуете если файл залочен?
Мне кажется не средства узнать о разлочке кроме долбления с райзе.
...
Рейтинг: 0 / 0
доступ к файлу
    #39487106
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял. Писать в темп, а ловить свой файл?
Если событие работает, то более ничего не надо.
...
Рейтинг: 0 / 0
25 сообщений из 90, страница 2 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / доступ к файлу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]