Как я могу пропустить файлы, у которых недостаточно прав для просмотра?
Вы не можете .
Вы должны попытаться прочитать файл, чтобы узнать, действительно ли вы можете прочитать файл. См. Как проверить, доступен ли файл для чтения?
В общем, «Использовать X, чтобы увидеть, могу ли я сделать Y», - это принципиально неверный подход. X - это не Y, поэтому успешное выполнение X не означает, что Y будет работать, а X не означает, что Y потерпит неудачу. Поскольку связанный вопрос показывает , ни одна версия Java isReadable()
не даст вам окончательных результатов относительно того, действительно ли вы можете читать файл.
Во-вторых, даже если вы каким-то образом придумали проверку, которая на самом деле идеальна (вы этого не сделаете, потому что, например, вы даже не видите никаких правил SELinux , которые могут быть на месте. ..), у вас все еще есть ошибка TOCTOU - все меняется.
Документация isReadable()
даже гласит:
Обратите внимание, что результат этого метода сразу устарел, нет никакой гарантии, что последующая попытка открыть файл для чтения будет успешной
Тот факт, что ваш чек сказал, что вы можете прочитать файл, не означает, что вы действительно можете прочитать файл при попытке.
Единственный окончательный способ определить, что вы действительно можете прочитать файл, - это действительно прочитать этот файл. Любые проверки, которые вы делаете перед попыткой открыть файл для чтения, просто добавляют бесполезные накладные расходы.
Вы все равно должны правильно обрабатывать исключения в любом месте вашего кода.