概要
ファイルチューザーなどで入力されたファイル名が、デバイスファイル名(con
、prn
、nul
、aux
など)でないかチェックします。
サンプルコード
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 all解説
Windows
環境でDevice Name
を含むような正しくないファイルパス(c:\con.txt
など)を読み書きしようとするとException
が発生します。正しいファイルパスかどうかはFile#getCanonicalPath()
メソッドがnull
を返すかどうかでチェックできます。
- 追記:
1.5.0_08
で以下のように修正された - JDK 6リリースでの拡張機能 - Java I/O の拡張機能
- 引用:「
CON
、NUL
、AUX
、LPT
などの予約されたデバイス名には必ずfalse
を返すように、File.isFile()
のWindows
実装が変更されました。 以前の戻り値はtrue
で、それがUnix
で使用するデバイスの動作と整合していないことから、対象ユーザーはこれをバグとみなしていました。」
- 引用:「