
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
08.07.2017, 10:26
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
Здравствуйте уважаемые! тут столкнулся с проблемой при чтении из файла выбрасывает эксепшен: Код: plaintext как можно узнать доступность файла? или надо через вайл проверять в цикле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 10:39
|
|||
|---|---|---|---|
|
|||
доступ к файлу |
|||
|
#18+
Музаффар, через вайл? File.canRead(), например? А в цикле, или как ещё, это уже ваши бизнес требования надо смотреть. Но вообще, проблема часто вылазит, если вы где-то файлы не закрываете. Особенно при записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 10:52
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
Blazkowicz, Код: java 1. 2. 3. 4. прослушивается каталог, и с поступлением нового файла читается, парсится и т.д. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. прикол в том что иногда я получаю эксепшн иногда все гладко идет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 11:18
|
|||
|---|---|---|---|
|
|||
доступ к файлу |
|||
|
#18+
Музаффар, Заведи ScheduledExecutorService и в случае исключения кидай туда задачу обработки файла. У задачи заведи счетчик, чтобы после N попыток её отменить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 12:10
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
Blazkowicz, разве f.canRead() && f.canWrite() && f.exists() не обеспечивает условие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 12:42
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
как я понял тут говорится что canWrite() и т.д. не помогут? https://stackoverflow.com/questions/1500174/check-if-a-file-is-locked-in-java ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 13:45
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
Скорее всего два процесса (потока) крутят вотчеры и гоняют гонки за f.canRead()... e.t.c Надо внимательно смотреть в ps -aux или tasklist на предмет процессов которые должны были умереть но не умерли. Такое я иногда наблюдал при mvn test или если несколько сеансов тестирования были запущены из среды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 13:55
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
maytonСкорее всего два процесса (потока) крутят вотчеры и гоняют гонки за f.canRead()... e.t.c как два? можно по подробнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 14:02
|
|||
|---|---|---|---|
|
|||
доступ к файлу |
|||
|
#18+
Музаффарпрослушивается каталог, и с поступлением нового файла читается, парсится и т.д. Это неправильно, поскольку файл сначала появляется, потом в него записывается содержимое, потом он закрывается. Читать и парсить его можно только после последней операции, а уведомление ты получаешь о первой. Если есть возможность изменить логику софтины, которая файл записывает, то следует использовать такую: файл открывается с временным расширением, записывается, закрывается, переименовывается. Тогда по поступлению события переименования ты можешь его спокойно открывать, читать, парсить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 14:13
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
Dimitry Sibiryakov, так так так изначально хотел задавать именно этот вопрос как вообще происходит копирования файла вот и ответ, и получается я должен реагировать не на ENTRY_CREATE а на ENTRY_MODIFY? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 18:00
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
а такая решения задачи допускается? с точки зрения правильного кодинга? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 18:03
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
МузаффарmaytonСкорее всего два процесса (потока) крутят вотчеры и гоняют гонки за f.canRead()... e.t.c как два? можно по подробнее Когда возникнет проблема - сделай в консоли Код: java 1. и покажи что вышло. Потом я разовью мысль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 19:10
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
Как делаю я: При получении оповещения о появлении нового файла пытаюсь его открыть в монопольном режиме. Если не получается, в цикле жду некоторый интервал и снова пытаюсь открыть. Если суммарное время интервалов превышает некий максимум, считаю, что с файлом поработать не случилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 19:22
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
Друзья. Я думаю еще стоит нам всем обратить внимание на FileLock::lock() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 21:18
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
mayton Код: java 1. и покажи что вышло. Потом я разовью мысль. сорри но как это делается? да скорее проблема в локе походу... а чем мой вариант плох? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 21:37
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
[рукалицо] Открой консоль (что у тебя Windows или RHEL) и набери текст который я тебе набил. В ответ тебе выскочит список java процессов запущенных в данный момент. Я подозреваю что ты не прибил старый процесс и сам себя заблочил.... Фууууххх.... Ферштейн? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 21:47
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
mayton, винда, йа йа... )) но не всегда есть эксепшен... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 21:49
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
вот что получил при добавлении нового файла... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 22:01
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
По сведеньям jps вроде все ОК. У тебя 1 процесс TrainTables.main. Это хорошо. Значит причины блокировки либо в 3-м приложении (антивирус?) либо ты так написал код что блокируешь сам себя. Теперь вопросы: 1) Откуда ты взял этот код? Сам написал? Код: java 1. 2. 3. 4. Здесь между проверкой на canRead(), canWrite() есть ненулевой тик времени когда файл теоретически может быть захвачен другим потоком (процессом). Нарушается базовый принцип работы с блокировками. Ты не можешь пробовать или щупать статус блокировки. Ты должен блокировать сразу. 2) Я до конца не помню как работает WatchService. Но может-ли он ловить своё собственное эхо? Тоесть поймать положительную обратную связь от процесса readingFile? И что внутри raeadingFile? Поток? Асинхронный вызов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2017, 22:23
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
mayton, может быть проблема в антивире... счас узнаем, и так выключил автоматическую защиту антивира, 3 раза зациклился... значит антивир не причем. авторлибо ты так написал код что блокируешь сам себя. ну вотчер был взять кдето из доках оракла... автор Откуда ты взял этот код? Сам написал? сам, думал поможет так как в доке написан для чтения (Tests whether the application can read the file denoted by this abstract pathname.) а для записи (Tests whether the application can modify the file denoted by this abstract pathname.) как я понял тут может ли читать, может ли записать... авторЗдесь между проверкой на canRead(), canWrite() есть ненулевой тик времени когда файл теоретически может быть захвачен другим потоком (процессом). Нарушается базовый принцип работы с блокировками. Ты не можешь пробовать или щупать статус блокировки. Ты должен блокировать сразу. может быть а может на самом деле файл сначала появляется, потом в него записывается содержимое, потом он закрывается и вотчер при появлении собирается читать когда ОС ещё записывает туда инфо? автор2) Я до конца не помню как работает WatchService. Но может-ли он ловить своё собственное эхо? Тоесть поймать положительную обратную связь от процесса readingFile? И что внутри raeadingFile? Поток? Асинхронный вызов? возможно и я не до конца понимаю... хз, но когда ридингФайл не смог получить доступ Вотчер сразу давал ислкючения и завершал процесс полностью нет не поток можно сказать да, хотя об этом не думал даже... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.07.2017, 00:19
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
Музаффарвозможно и я не до конца понимаю... хз, но когда ридингФайл не смог получить доступ Вотчер сразу давал ислкючения и завершал процесс полностью нет не поток можно сказать да, хотя об этом не думал даже... Мне остается только вздыхать и сочувственно кивать. У меня-же нет никаких сведений по readingFile(...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.07.2017, 11:42
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
Хм... я скопировал 1 единственный html файл и ошибка сразу воспроизвелась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.07.2017, 12:50
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
Я провел еще один эксперимент в большим файлом (1.4Г) и убедился что событие ENTRY_CREATE прилетает до завершения финализации копирования. Это немножко не то событие. Нам по хорошему нужно реагировать на закрытие (CLOSE) файла после копирования. Я ищу в спеках WatchService но ничего не нахожу. Бесконечный цикл с проверкой canRead(), canWrite() является по моему мнению нехорошим паттерном. Мне не верится что имемнно такой подход используется в веб-контейнерах к примеру для мониторинга изменений *.jsp. Скорее всего там нечто более умное. Вот это умное нам надо найти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.07.2017, 13:00
|
|||
|---|---|---|---|
доступ к файлу |
|||
|
#18+
mayton, типа такого http://www.java2s.com/Tutorials/Java/java.nio.file/WatchService/Java_WatchService_close_.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&mobile=1&tid=2122763]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 195ms |
| total: | 319ms |

| 0 / 0 |
