2011-01-10 2 views
6

Мне нужно прочитать лог-файлы в момент их написания. проблема в том, что эти лог-файлы будут переименованы в какой-то момент времени, и я должен гарантировать, что эта операция переименования возможна/процесс чтения java не блокирует ее.Чтение (журнал) файла без блокировки переименования/перемещения для других процессов

, как это сделать

+2

Хотя Java является кросс-платформенным, этот вопрос действительно зависит от операционной системы. Например, Linux не будет блокировать файл по умолчанию. Вы можете перемещать или даже удалять его, пока он открыт для чтения. Однако я не знаю обходных путей для Windows, поэтому я не могу ответить на этот (хороший) вопрос. –

+0

Но прецедент: «читать файлы журналов, пока они растут и переименовываться иногда», должно быть распространено, не так ли? Что я могу сделать, минимизируя время блокировки? Чтение только последней строки -how? – dermoritz

+0

«Минимизация» на самом деле не очень хорошая идея, хотя ее можно реализовать, используя чтение с произвольным доступом. Но таким образом вы будете делать ошибку, которую трудно воспроизвести. Если процесс чтения знает переименование логики, он может избежать открытия файла, если он будет переименован. Но это своего рода полуобслуживание, которое может работать или не работать в зависимости от рассматриваемой логики. Лучшее, что вы можете сделать, это сделать процесс переименования просто повторите попытку, если переименование не удастся, поэтому это не будет фатальной ошибкой. Но он работает, только если у вас есть контроль над ним. –

ответ

0

Вы можете скопировать в оперативную память и читать копию

+0

это будет реализовывать «минимизацию времени блокировки» - подход, не так ли? Игнорируя комментарий Сергея на мгновение («Но так вы будете делать ошибку, которую трудно воспроизвести».) Как это реализовать? Я попробовал «randomaccessfile» с обратным чтением. но пока я читаю, я не могу переименовать файл. Каков самый быстрый способ скопировать файл или часть в память и прочитать память? – dermoritz

Смежные вопросы