Когда применять exists() ,isFile(), canRead() из класса File в Java
Имеет ли смысл такая проверка файла перед попыткой чтения из него?
File inputFile = new File(inputFileName);
if (inputFile.exists() && inputFile.isFile() && inputFile.canRead()) {...}
Может здесь что-то лишнее? Если я не ошибаюсь метод exists() вернёт false при отсутствии права записи в файл или если он скрытый. Еще мне кажется этот код затратным. Как лучше выполнить проверку файла перед считыванием данных из него?
Ответы (1 шт):
Методы isFile и canRead сами проверяют существование файла, поэтому предварительный exists не нужен. Но canRead довольно специфично себя ведёт, например, под Windows возвращает true для каталогов, поэтому сильно на него я бы не рассчитывал.
И ещё такой момент, что предварительная проверка не гарантирует, что тот же FileInputStream будет создан на этом файле. Обработку исключения придётся делать в любом случае. Во-первых, может быть специфика прав доступа. Во-вторых, файл могут успеть за это время удалить (очень маловероятно, но возможно). В-третьих, не гасить же исключение.
Поэтому возможна схема, что сперва сделать предварительную проверку при помощи isFile, в случае false можно, например, посмотреть при помощи isDirectory, не каталог ли это, уточнив сообщение об ошибке. Если существует файл, то открывать его, но с обработкой исключения. exists и canRead же в этом случае вообще не вызывать. Если уточнение сообщения об ошибке не нужно, то сразу открывать файл, отдав всё на откуп обработке исключения.