Четкий способ проверки файла - PullRequest
0 голосов
/ 01 января 2019

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

Вот мой код:

public boolean isValidFile(String filePath) {
    File file = new File(filePath);
    if(!getFileExtension(file).equals("txt")) {
        return false;
    }
    if(!file.exists()) {
        return false;
    }
    if(!file.isFile()) {
        return false;
    }
    if(file.isHidden()) {
        return false;
    }
    if(!file.canExecute()) {
        return false;
    }
    if(!file.canRead()) {
        return false;
    }

    return true;
}

Есть предложения?

Ответы [ 3 ]

0 голосов
/ 01 января 2019

Это может быть основано на мнении, и ваша функция вполне читабельна (на мой взгляд ...), но некоторые другие опции открыты для вас:

if(!getFileExtension(file).equals("txt")) return false;
if(!file.exists()) return false;
...

или

if(!getFileExtension(file).equals("txt") ||
   !file.exists() ||
   ...
   !file.canRead()) return false;

или

return (
   getFileExtension(file).equals("txt") &&
   file.exists() &&
   ...
   file.canRead());

, что может быть более прямым способом написания требования к действительному файлу.

0 голосов
/ 01 января 2019

Я думаю, что ваш метод довольно хорош для того, чего вы хотите достичь.

Попытка сделать его более компактным возможна с использованием логических операторов (|| и &&), но я думаю, что снижение читабельности намного хуже, чем многословие .

По моему мнению, цепочка ответственности полностью излишня для такой проблемы.

0 голосов
/ 01 января 2019

Вы можете использовать булеву алгебру:

public boolean isValidFile(String filePath) {
  File file = new File(filePath);
  return
    getFileExtension(file).equals("txt") &&
    file.exists() &&
    file.isFile() && 
    !file.isHidden() &&
    file.canExecute() &&
    file.canRead();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...