myFile.isFile () или myFile.isDirectory () возможен ли какой-либо третий тип функции? - PullRequest
0 голосов
/ 07 июня 2018

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

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

1 Ответ

0 голосов
/ 07 июня 2018

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


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

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

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

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

enum Kind { DIRECTORY, FILE }

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

...