0

ではない、アクセス可能である、ディレクトリではなくファイルである必要があるなどの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)", ...
}

どこかから「つまむ」ことができる何かのボイラープレートがたくさんあるように見えます。特に必要なチェックはこれらだけではないため、さらに多くのチェックがあります (たとえば、ファイルがテキスト ファイルであり、適切なエンコーディングが適用されているなど)。これよりも簡単な方法があることは私には理にかなっているように思えます。おそらく、ビルダーを介して構築し、verifyFileSpecs 静的ヘルパーに渡す FileSpecs オブジェクトでしょうか?

質問: やり方が間違っているのでしょうか、それとも再利用できるコードはありますか?

投稿の有効性に関する FAQ への回答:

事前にいくつかの調査を行ったことを示しています。Java 6 SDK を調べました。そこからさまざまなメソッドを取得しました。JDK 7 と Files.isReadable を調べ、Apache Commons IO を調べました...

この質問がユニークであることを示しています: 私は再利用できるコードがあるかどうかを明確に尋ねています。「パスがディレクトリではなくファイルに対応しているかどうかを確認するにはどうすればよいですか?」 SOで

これが他の人にとって役立つ理由: チームは、コード レビューのために提出され、チェックインされてバージョン管理され、潜在的に保守 (単体テストなど) される定型コードを好まないため、信頼できるソースからコードを借用すると非常に役立ちます、 私の意見では。

4

1 に答える 1

2

はい、上記のコードはありませんDRY (Don't Repeat Yourself)

Apache Commons のValidateの使用を検討してください。

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...

}
于 2012-08-04T22:54:39.947 に答える