TITLE:Device Nameのチェック

Usage: #tags(tags)
Posted by at 2003-09-25

Device Nameのチェック

ファイルチューザーなどで入力されたファイル名が、デバイスファイル名(con、prn、nul、auxなど)でないかチェックします。

  • &jar;
  • &zip;
DeviceName.png

サンプルコード

private boolean isCanonicalPath(File file) {
  if(file==null) return false;
  try{
    if(file.getCanonicalPath()==null) return false;
  }catch(IOException ioe) {
    return false;
  }
  return true;
}
View in GitHub: Java, Kotlin

解説

Windows環境で、Device Nameを含むような正しくないファイルパス(c:\con.txtなど)を読み書きしようとすると、Exceptionが発生します。正しいファイルパスかどうかは、File#getCanonicalPath() メソッドがnullを返すかどうかでチェックすることができます。

参考リンク

  • Windowsパス名の落とし穴
  • Java SE 6 の拡張機能 - Java I/O の拡張機能
    • 引用:「CON、NUL、AUX、LPT などの予約されたデバイス名には必ず false を返すように、File.isFile() Windows 実装が変更されました。 以前の戻り値は true で、それが Unix で使用するデバイスの動作と整合していないことから、対象ユーザーはこれをバグとみなしていました。」

コメント