MyFile.isFile () или myFile.isDirectory () возможны ли какие-либо функции третьего типа?

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

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 ()?

"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. Может, стоит просто поискать те исключительные случаи, когда файл не "нормальный
ernest_k 07.06.2018 08:02
checkFileOrDirectory название метода не совсем точно описывает его функциональность
Scary Wombat 07.06.2018 08:02

Если его нет, они оба вернут ложь.

shmosel 07.06.2018 08:03

как насчет file.exists (); ?

Stultuske 07.06.2018 08:07

Я дал понять, что файл существует, комментируя. @ErnestKiwele Я обязательно посмотрю на нестандартные файлы, с чего мне начать?

Mohd Naved 07.06.2018 08:07

хорошо, так что вам интересно, может ли быть третий тип? каталог, файл, [что-то еще]? как вы считаете это возможным?

Stultuske 07.06.2018 08:10

Я спрашиваю, есть ли какие-либо файлы, которые java не может прочитать как файл или как каталог или вернуть истину для обоих? @Stultuske, пожалуйста, проверьте этот вопрос: stackoverflow.com/questions/14853402/…

Mohd Naved 07.06.2018 08:13

@MohdNaved ты это проверил? в комментарии к ответу OP утверждает, что .exists () возвращает false, в этом случае действительно и .isDirectory (), и .isFile () вернут false

Stultuske 07.06.2018 08:19

Да, сейчас увидел, спасибо @Stultuske

Mohd Naved 07.06.2018 08:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
9
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

«Файл» может быть чем-то вроде символической ссылки. Важна ли разница между файлом и символической ссылкой на файл, зависит от вашего приложения.


Использование логического значения для представления «что-то или что-то еще» - плохая идея, потому что неясно, что означают «истина» или «ложь».

Даже если вы помните, что «истина» означает «это каталог», «ложь» логически означает «не является каталогом» ... Итак, читатель задается вопросом: «Ну, я знаю, что это не каталог, а что такое является ? "

И сам факт, что вы задаете вопрос, демонстрирует это.

Вместо этого рассмотрите возможность использования перечисления:

enum Kind { DIRECTORY, FILE }

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

Спасибо, что дали время на объяснения. Не могли бы вы также написать образец кода? Я никогда раньше не играл с enum.

Mohd Naved 07.06.2018 08:40

Другие вопросы по теме