Swing/DeviceName のバックアップの現在との差分(No.12)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/DeviceName へ行く。
- 1 (2004-02-26 (木) 02:48:54)
- 2 (2004-06-02 (水) 09:52:29)
- 3 (2004-08-03 (火) 01:55:04)
- 4 (2004-08-31 (火) 12:11:22)
- 5 (2004-10-08 (金) 06:18:30)
- 6 (2004-11-04 (木) 10:03:52)
- 7 (2005-04-28 (木) 04:32:28)
- 8 (2005-11-12 (土) 21:56:39)
- 9 (2006-02-27 (月) 15:46:44)
- 10 (2006-04-12 (水) 19:40:26)
- 11 (2006-06-01 (木) 17:49:04)
- 12 (2006-08-11 (金) 14:05:49)
- 13 (2006-08-11 (金) 19:30:41)
- 14 (2007-05-24 (木) 18:27:55)
- 15 (2007-10-21 (日) 04:28:41)
- 16 (2008-01-25 (金) 02:09:50)
- 17 (2013-02-26 (火) 14:55:39)
- 18 (2014-11-01 (土) 00:46:09)
- 19 (2014-12-24 (水) 14:43:03)
- 20 (2015-03-06 (金) 19:01:57)
- 21 (2017-01-25 (水) 18:59:17)
- 22 (2017-11-02 (木) 15:34:40)
- 23 (2017-12-07 (木) 11:44:12)
- 24 (2018-02-20 (火) 19:13:06)
- 25 (2018-09-30 (日) 22:02:04)
- 26 (2020-09-30 (水) 10:28:06)
- 27 (2022-06-17 (金) 11:55:49)
- 28 (2022-08-20 (土) 22:15:25)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:Device Nameのチェック #navi(../) *Device Nameのチェック [#g9d2457b] >編集者:[[Terai Atsuhiro>terai]]~ 作成日:2003-09-25~ 更新日:&lastmod; --- 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 --- * 概要 [#summary] ファイルチューザーなどで入力されたファイル名が、デバイスファイル名(`con`、`prn`、`nul`、`aux`など)でないかチェックします。 #contents #download(https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTKz2LmiiI/AAAAAAAAAWk/HOTsKRHPAVo/s800/DeviceName.png) **概要 [#h6f0e904] ファイルチューザーなどで入力されたファイル名が、デバイスファイル名(con、prn、nul、auxなど)でないかチェックします。 * サンプルコード [#sourcecode] #code(link){{ private boolean isCanonicalPath(File file) { if (file == null) return false; try { if (file.getCanonicalPath() == null) { return false; } } catch (IOException ioe) { return false; } return true; } }} #screenshot * 解説 [#explanation] - `Java 1.4 + Windows`の環境で不正なファイルパス(`c:\con.txt`のような`Device Name`を含む場合など)を読み書きしようとすると`Exception`が発生する - 正しいファイルパスかどうかは`File#getCanonicalPath()`メソッドが`null`を返すかどうかでチェック可能 - 追記: `1.5.0_08`で以下のように修正された -- [https://bugs.openjdk.org/browse/JDK-6176051 File.isFile() は Windows プラットフォームで "con" に "false" を返すべき] - [https://docs.oracle.com/javase/jp/8/docs/technotes/guides/io/enhancements.html#jdk6 JDK 6リリースでの拡張機能 - Java I/O の拡張機能] -- 引用:「`CON`、`NUL`、`AUX`、`LPT`などの予約されたデバイス名には必ず`false`を返すように、`File.isFile()`の`Windows`実装が変更されました。 以前の戻り値は`true`で、それが`Unix`で使用するデバイスの動作と整合していないことから、対象ユーザーはこれをバグとみなしていました。」 **サンプルコード [#i6a151e5] private boolean isCanonicalPath(File file) { if(file==null) return false; try{ if(file.getCanonicalPath()==null) return false; }catch(IOException ioe) { return false; } return true; } * 参考リンク [#reference] - [http://www.ipa.go.jp/security/awareness/vendor/programming/b08_01_main.html Windowsパス名の落とし穴] - [https://docs.oracle.com/javase/jp/8/docs/technotes/guides/io/enhancements.html#jdk6 JDK 6リリースでの拡張機能 - Java I/O の拡張機能] //-&jnlp; -&jar; -&zip; **解説 [#s7367925] Device Nameを含むような''正しくないファイルパス''(c:\con.txtなど)を読み書きしようとすると、Exceptionが発生します。正しいファイルパスかどうかは、File#getCanonicalPath() メソッドがnullを返すかどうかでチェックすることができます。 **参考リンク [#sa0510ba] -[[Windowsパス名の落とし穴>http://www.ipa.go.jp/security/awareness/vendor/programming/b08_01_main.html]] **コメント [#z8d1a04a] * コメント [#comment] #comment #comment