Как проверить, держит ли программа Java открытый дескриптор файла? - PullRequest
4 голосов
/ 13 декабря 2010

У меня есть программа на Java, работающая под Windows XP. Он читает файл и закрывает файл, или, по крайней мере, это то, что он должен делать.

Иногда файл остается заблокированным, и я не могу записать в него («Я» означает меня как пользователя, пытающегося выполнить copy file2.out file1.out из командной строки, где file1.out - это файл, который читает моя Java-программа), пока Я закрываю свою программу на Java. (Windows жалуется, «не может записать в файл с сопоставленным пользовательским процессом» или что-то в этом роде)

Есть предложения по отладке? Я в тупике.


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

Я могу сузить это до нескольких классов, но я не уверен, где искать дальше.

Ответы [ 2 ]

4 голосов
/ 13 декабря 2010

Вы можете оформить заказ Sysinternals Process Explorer , который является отличным инструментом, позволяющим отлаживать, какой процесс удерживает блокировку дескриптора файла.В главном меню нажмите Find -> Find Handle or DLL ... и введите имя файла.Он покажет вам процесс, который удерживает блокировку.

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

1 голос
/ 02 августа 2011

FindBugs отлично подходит для поиска этих типов ошибок и многих других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...