Java процесс не может получить доступ к файлу так как этот файл занят другим процессом
Перейти к содержимому

Java процесс не может получить доступ к файлу так как этот файл занят другим процессом

  • автор:

Процесс не может получить доступ к файлу, так как этот файл занят другим процессом

Загрузил файл. Теперь хочу его удалить, но пишет ошибку что не может удалить из за того что он занят. Но занят он самим сабой.

Что за фигня? Как избавить он этого процесса? Что бы после загрузки изображения сразу избавлялся от процесса или как там ещё.

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

02:28:45.003 [pool-2-thread-1] ERROR org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler — Unexpected error occurred in scheduled task
java.nio.file.FileSystemException: D:\servTest\3\e9\1a\3c\3e91a3c3f272bfe3c88a4fba2c86d693.txt: Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.

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

Java не может получить доступ к файлу, потому что он используется другим процессом

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

Это работает, когда я делаю один запрос, но как только я подставляю свой код 5 или 10 пользовательским запросам из jMeter, содержимое публикуется на kafka успешно, но код не может удалить файл. Я получаю сообщение FileSystemException с сообщением, что The process cannot access the file because it is being used by another process. .

Я предполагаю, что есть проблема с concurrency, которую я не вижу. Пожалуйста, помогите!

3 ответа

У меня была аналогичная проблема, а также в следующем потоке: Многопоточность в очереди при попытке загрузить динамически созданные файлы в службу очереди, и для меня потребовалось 2 дня. Благодаря Holger, который дал ответ, как описано выше, в результате чего происходит блокировка, возможно, из-за того, что создание не было выполнено полностью при чтении другим потоком, оно значительно меня спасло времени.

Мое первоначальное решение, так как было найдено много из Интернета, было:

Я изменил его на:

И все работает отлично. Чтобы обработать «как-то» несколько запусков событий ENTRY_MODIFY (дублированные файлы загружены), я выполняю удаление в файле внутри метода uploadToQueue() после его загрузки.

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

Глядя на ваш код, кажется, когда один файл выбран потоком для публикации снова, другой поток собирает его для публикации. Вот почему никто не может его удалить. Это должно быть только concurrency. Вы должны перепроектировать код на основе критерия: шаги, которые могут выполняться одновременно, и те, которые не могут быть. Таким образом, шаги во всем процессе:

  • возьмите файл (основной поток должен это сделать)
  • опубликовать файл (вызвать другой поток, чтобы сделать это)
  • удалить файл (так называемый поток должен удалить его)
  • проверьте, присутствует ли какой-либо файл (опять же основной поток может это сделать)

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

Перед удалением необходимо закрыть все соединения, которые обращаются к этому файлу.

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ошибка «Процесс не может получить доступ к файлу, так как этот файл занят другим процессом» при импорте расширения из базы #794

Ошибка «Процесс не может получить доступ к файлу, так как этот файл занят другим процессом» при импорте расширения из базы #794

Comments

Описание ошибки

При импорте из базы данных расширения происходит ошибка:

java.lang.reflect.InvocationTargetException
at com._1c.g5.v8.dt.internal.platform.services.ui.infobases._import.ImportExtensionsWizard.lambda$1(ImportExtensionsWizard.java:257)
at com._1c.g5.v8.dt.internal.platform.services.ui.infobases.RuntimeOperationSupport.execRuntimeOperation(RuntimeOperationSupport.java:96)
at com._1c.g5.v8.dt.internal.platform.services.ui.infobases._import.ImportExtensionsWizard.importExtensions(ImportExtensionsWizard.java:241)
at com._1c.g5.v8.dt.internal.platform.services.ui.infobases._import.ImportExtensionsWizard.lambda$0(ImportExtensionsWizard.java:117)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:122)
Caused by: org.eclipse.core.runtime.CoreException: Каталог проекта «СППР__для_проекта_EDT.рарусДоработки» уже существует
at com._1c.g5.v8.dt.internal.core.platform.AbstractDependentProjectManager.create(AbstractDependentProjectManager.java:284)
at com._1c.g5.v8.dt.internal.core.platform.AbstractDependentProjectManager.create(AbstractDependentProjectManager.java:246)
at com._1c.g5.v8.dt.internal.core.platform.ExtensionProjectManager.create(ExtensionProjectManager.java:145)
at com._1c.g5.v8.dt.core.platform.IExtensionProjectManager$pbryglu.create(Unknown Source)
at com._1c.g5.v8.dt.internal.platform.services.ui.infobases._import.AbstractImportWizard.importExtension(AbstractImportWizard.java:233)
at com._1c.g5.v8.dt.internal.platform.services.ui.infobases._import.ImportExtensionsWizard.lambda$1(ImportExtensionsWizard.java:250)
. 4 more

Как воспроизвести

  1. В списке «Информационные базы», контекстное меню «Импортировать расширения»
  2. Указать базовый проект, выбрать расширение, нажать «Готово»

Скриншоты

image

Ожидаемое поведение

Расширение должно было импортироваться в проект

Лог рабочей области

Версия 1С:EDT

Операционная система

Установленные плагины

Дополнительная информация

Импортировать пытаюсь расширение к типовой СППР (режим совместимости Версия 8.3.17). Причём, пустое расширение импортируется нормально. Сама конфигурация, без расширения, тоже импортируется.

Java.nio.file.FileSystemException: процесс не может получить доступ к файлу, поскольку он используется другим процессом

Я пишу программу, которая копирует themselve при первом выполнении в определенную папку, работающую в linux или windows.
В linux он работает отлично, но когда я пытаюсь сделать то же самое на окнах, я получаю следующую ошибку:

java.nio.file.FileSystemException: процесс не может получить доступ к файлу, потому что он используется другим процессом (в sun.nio.fs.WindowsException)

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

Мои строки кода:

ОТВЕТЫ

Ответ 1

Ok, Я не нашел идеального решения, но что-то.

Эта копия правильно копирует файл и корректно удаляет оригинал только при выполнении linux.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *