Swing/DeviceName のバックアップの現在との差分(No.9)
Device Nameのチェック
編集者:Terai Atsuhiro~
作成日:2003-09-25
更新日:2022-06-17 (金) 11:55:49
概要
ファイルチューザーなどで入力されたファイル名が、デバイスファイル名(con
、prn
、nul
、aux
など)でないかチェックします。
概要
ファイルチューザーなどで入力されたファイル名が、デバイスファイル名(con、prn、nul、auxなど)でないかチェックします。Screenshot
Advertisement
サンプルコード
private boolean isCanonicalPath(File file) { if(file==null) return false; try{ if(file.getCanonicalPath()==null) return false; }catch(IOException ioe) { return false; } return true; }
サンプルコード
解説
Device Nameを含むような正しくないファイルパス(c:\con.txtなど)を、読み書きしようとすると、落ちたり、おかしくなる場合があるようです。これはFile#getCanonicalPath() メソッドがnullを返すかどうかでチェックすることができます。解説
-
Java 1.4 + Windows
の環境で不正なファイルパス(c:\con.txt
のようなDevice Name
を含む場合など)を読み書きしようとするとException
が発生する - 正しいファイルパスかどうかは
File#getCanonicalPath()
メソッドがnull
を返すかどうかでチェック可能 - 追記:
1.5.0_08
で以下のように修正された - JDK 6リリースでの拡張機能 - Java I/O の拡張機能
- 引用:「
CON
、NUL
、AUX
、LPT
などの予約されたデバイス名には必ずfalse
を返すように、File.isFile()
のWindows
実装が変更されました。 以前の戻り値はtrue
で、それがUnix
で使用するデバイスの動作と整合していないことから、対象ユーザーはこれをバグとみなしていました。」
- 引用:「