TITLE:Device Nameのチェック

Device Nameのチェック

編集者:Terai Atsuhiro~

作成日:2003-09-25
更新日:2022-06-17 (金) 11:55:49
  • category: swing folder: DeviceName title: Device Nameのチェック tags: [File, JFileChooser, Fixed] author: aterai pubdate: 2003-09-08 description: ファイルチューザーなどで入力されたファイル名が、デバイスファイル名(con、prn、nul、auxなど)でないかチェックします。 image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTKz2LmiiI/AAAAAAAAAWk/HOTsKRHPAVo/s800/DeviceName.png

概要

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

概要

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

#screenshot

サンプルコード

#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
private boolean isCanonicalPath(File file) {
  if(file==null) return false;
  try{
    if(file.getCanonicalPath()==null) return false;
  }catch(IOException ioe) {
  if (file == null) return false;
  try {
    if (file.getCanonicalPath() == null) {
      return false;
    }
  } catch (IOException ioe) {
    return false;
  }
  return true;
}
  • &jar;
  • &zip;

解説

Windows環境で、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 の拡張機能
    • 引用:「CONNULAUXLPTなどの予約されたデバイス名には必ずfalseを返すように、File.isFile()Windows実装が変更されました。 以前の戻り値はtrueで、それがUnixで使用するデバイスの動作と整合していないことから、対象ユーザーはこれをバグとみなしていました。」

参考リンク

参考リンク

コメント

コメント