有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是验证文件的清晰方法

我必须验证作为用户输入接收的文件的路径。我的问题是,我必须使用太多的“如果”,在我看来,代码看起来有点混乱。我知道我可以通过使用“责任链”模式来解释这个条件语句,但是这个问题对于我的问题来说似乎有点太复杂了。我的意思是,我真的不想为每次验证创建一个新类

这是我的密码:

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) 个答案

  1. # 1 楼答案

    您可以使用布尔代数:

    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();
    }
    
  2. # 2 楼答案

    我认为你的方法对于你想要达到的目标来说是相当好的

    尝试使用布尔运算符(| |和&;)使其更紧凑是可能的但是我认为可读性下降比冗长更糟糕

    在我看来,对于这种问题,责任链完全是过火了

  3. # 3 楼答案

    这可能是基于观点的,并且您的函数非常可读(在我看来…),但也有其他一些选择:

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

    这可能是编写有效文件要求的更直接的方法