Я писал общую функцию, чтобы проверить, содержит ли переменная файл или каталог. Поэтому мне пришла в голову идея проверить это с помощью логической функции возвращаемого типа. что-то вроде этого :
function boolean checkFileOrDirectory(File myFile){
// Assume file already exist
if (myFile.isDirectory()){
//myFile is a directory
return true;
} else {
//myFile is a file
return false;
}
}
Меня интересовала точность этой функции. Я был бы очень признателен, если бы кто-нибудь мог сказать мне, будут ли какие-либо типы файлов, которые не подпадают под isFile () или isDirectory ()?
checkFileOrDirectory название метода не совсем точно описывает его функциональность
Если его нет, они оба вернут ложь.
как насчет file.exists (); ?
Я дал понять, что файл существует, комментируя. @ErnestKiwele Я обязательно посмотрю на нестандартные файлы, с чего мне начать?
хорошо, так что вам интересно, может ли быть третий тип? каталог, файл, [что-то еще]? как вы считаете это возможным?
Я спрашиваю, есть ли какие-либо файлы, которые java не может прочитать как файл или как каталог или вернуть истину для обоих? @Stultuske, пожалуйста, проверьте этот вопрос: stackoverflow.com/questions/14853402/…
@MohdNaved ты это проверил? в комментарии к ответу OP утверждает, что .exists () возвращает false, в этом случае действительно и .isDirectory (), и .isFile () вернут false
Да, сейчас увидел, спасибо @Stultuske




«Файл» может быть чем-то вроде символической ссылки. Важна ли разница между файлом и символической ссылкой на файл, зависит от вашего приложения.
Использование логического значения для представления «что-то или что-то еще» - плохая идея, потому что неясно, что означают «истина» или «ложь».
Даже если вы помните, что «истина» означает «это каталог», «ложь» логически означает «не является каталогом» ... Итак, читатель задается вопросом: «Ну, я знаю, что это не каталог, а что такое является ? "
И сам факт, что вы задаете вопрос, демонстрирует это.
Вместо этого рассмотрите возможность использования перечисления:
enum Kind { DIRECTORY, FILE }
Это не только самодокументируется (у вас будет код, говорящий что-то вроде «если это файл / иначе, если это каталог»), но и оставляет возможность добавления дополнительных типов в будущем.
Спасибо, что дали время на объяснения. Не могли бы вы также написать образец кода? Я никогда раньше не играл с enum.
"Tests whether the file denoted by this abstract pathname is a **normal** file. A file is normal if it is not a directory and, in addition, satisfies other system-dependent criteria". Это из документацииisFile. Может, стоит просто поискать те исключительные случаи, когда файл не "нормальный