Swing/DeviceName のバックアップの現在との差分(No.14)
TITLE:Device Nameのチェック
Device Nameのチェック
編集者:Terai Atsuhiro~
作成日:2003-09-25
更新日:2022-06-17 (金) 11:55:49
概要
ファイルチューザーなどで入力されたファイル名が、デバイスファイル名(con
、prn
、nul
、aux
など)でないかチェックします。
Screenshot
Advertisement
概要
ファイルチューザーなどで入力されたファイル名が、デバイスファイル名(con、prn、nul、auxなど)でないかチェックします。#screenshot
サンプルコード
#spanend
private boolean isCanonicalPath(File file) {
if(file==null) return false;
try{
if(file.getCanonicalPath()==null) return false;
}catch(IOException ioe) {
return false;
}
return true;
}
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
#spanadd
private boolean isCanonicalPath(File file) {
#spanend
if (file == null) return false;
try {
if (file.getCanonicalPath() == null) {
return false;
}
} catch (IOException ioe) {
return false;
}
return true;
#spanadd
}
#spanend
- &jar;
- &zip;
解説
Device Nameを含むような正しくないファイルパス(c:\con.txtなど)を読み書きしようとすると、Exceptionが発生します。正しいファイルパスかどうかは、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
で使用するデバイスの動作と整合していないことから、対象ユーザーはこれをバグとみなしていました。」
- 引用:「
- 追記: JDK 5.0 Update 8(1.5.0_08)に以下のような修正が入っているようです。