Java参数验证,文件存在,可以读取并且是常规文件

标签 java validation

我有这段代码来验证 java.io.File 参数,该参数不应为 null、应该可访问、应该是文件而不是目录等.:

private static final String EXCEPTION_FILE_CAN_NOT_BE_READ =
    "The file %s does not seem to readable.";
private static final String EXCEPTION_PATH_DOES_NOT_EXIST =
    "The path %s does not seem to exist.";
private static final String EXCEPTION_PATH_IS_NOT_A_FILE =
    "The path %s does not seem to correspond to a file.";
private static final String EXCEPTION_PATH_REFERENCE_IS_NULL =
    "The supplied java.io.File path reference can not be null.";

public static Banana fromConfigurationFile(
    File configurationFile) {
  if (configurationFile == null) {
    String nullPointerExceptionMessage =
        String.format(EXCEPTION_PATH_REFERENCE_IS_NULL, configurationFile);
    throw new NullPointerException();
  }
  if (!configurationFile.exists()) {
    String illegalArgumentExceptionMessage =
        String.format(EXCEPTION_PATH_DOES_NOT_EXIST,
            configurationFile.getAbsolutePath());
    throw new IllegalArgumentException(illegalArgumentExceptionMessage);
  }
  if (!configurationFile.isFile()) {
    String illegalArgumentExceptionMessage =
        String.format(EXCEPTION_PATH_IS_NOT_A_FILE,
            configurationFile.getAbsolutePath());
    throw new IllegalArgumentException(illegalArgumentExceptionMessage);
  }
  if (!configurationFile.canRead()) {
    String illegalArgumentExceptionMessage =
        String.format(EXCEPTION_FILE_CAN_NOT_BE_READ,
            configurationFile.getAbsolutePath());
    throw new IllegalArgumentException(illegalArgumentExceptionMessage);
  }
  // ... more tests, like "isEncoding(X)", "isBanana(ripe)", ...
}

看起来像是很多我可以从某个地方“捏”的东西的样板。特别是因为这些并不是我需要的所有检查,所以还有更多检查(例如,该文件是文本文件并且具有正确的编码,...)。在我看来,有比这更简单的方法是合理的。也许是通过 Builder 构造 FileSpecs 对象并传递给 verifyFileSpecs 静态助手?

问题:我做错了吗?还是有可以重用的代码?

有效期后常见问题解答:

显示我事先做了一些研究:我查看了 Java 6 SDK,这是我从中获取不同方法的地方,查看了 JDK 7 和 Files.isReadable,查看了 Apache Commons IO,...

表明这个问题是独特的:我是专门问是否有可以重用的代码,我不是问“如何检查路径是否对应于文件而不是目录?”,所有这些都有已经有答案了

为什么这对其他人有用:团队不喜欢像提交代码审查、 checkin 和版本控制、可能维护(单元测试等)那样的样板代码,因此,从信誉良好的来源借用代码将我认为非常有帮助。

最佳答案

是的,我想说上面的代码不是DRY(不要重复自己)

考虑使用Validate来自 Apache Commons。

public static Banana fromConfigurationFile(File configurationFile) {
  Validate.notNull(configurationFile, String.format(EXCEPTION_PATH_REFERENCE_IS_NULL, configurationFile));
  Validate.isTrue(configurationFile.exists(), String.format(EXCEPTION_PATH_DOES_NOT_EXIST, configurationFile.getAbsolutePath()));
  Validate.isTrue(configurationFile.isFile()), String.format(EXCEPTION_PATH_IS_NOT_A_FILE, configurationFile.getAbsolutePath()));
  // and more validation...

}

关于Java参数验证,文件存在,可以读取并且是常规文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11812426/

相关文章:

javascript - 使用 jquery 验证克隆的复选框和单选按钮

python - 需要帮助理解 sklearn python 中的 cross_val_score

java - IntelliJ IDEA javadoc F1

javascript - 用于检查文本框的 jQuery 函数

java - 按下箭头时按键绑定(bind)没有响应

java - Android WebView 无法在 WebRTC 对等连接上显示两个视频标签

javascript - jquery验证消息变化(自定义消息集)

javascript - 如何向此 jquery 脚本添加平滑滚动(到页面顶部)?

java - 在Java中使用 "final"参数线程安全

java - AsyncTask doInBackground 返回多个字符串