[Java] ファイル名に使用不可能な文字列

ファイル名には使用不可能な文字列がいくつかあります。
プログラムでファイルを作るときはこれらを考慮しなければいけないわけで。


ファイル名 – Wikipediaで確認すると不可能な記号の他に禁止文字列も存在するようです。

記号 記号名 使用が不可能な理由
/ スラッシュ パス名コンポーネント分離符として、UNIXなどのOSやMS-DOSWindowsでは使用不可能。
\ バックスラッシュ 同様にパス名コンポーネント分離符として、MS-DOSとWindowsでは使用不可能。
 ? クエスチョンマーク ワイルドカード(不特定だと示す記号)として使われるため、WindowsとAmigaOSでは使用不可能。
* アスタリスク 同様にワイルドカードとして、MS-DOSとWindowsでは使用不可能。
 : コロン ドライブレターに使用される、またはパス名分離符であるなどの理由から、Windows、AmigaOS、Mac OSでは使用不可能。
| バーティカルバー パイプの記号なので、Windowsで使用不可能。
引用符 スペースを含むファイル名の始まりと終わりを指定するのに使われるため、Windowsで使用不可能。
< 小なり記号 リダイレクトの記号として使われるので、UNIX系ではエスケープの必要な場合がある。NTFSでは使用不可。
> 大なり記号 <と同様に、UNIX系ではエスケープが必要な場合がある。NTFSでは使用不可。
. 終止符 ファイル名の最後に打ち込んだ場合、その後に拡張子が続くと解釈されるなどのトラブルとなってしまうため、MS-DOSで使用不可能。
CON, PRN, AUX, CLOCK$, NUL
COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9
LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9

CLOCK$とありますが、自機で試したところ上手くいきませんでした。試しにLOCK$でやってみたところ上手くいきましたので、もしかしたらこちらが正解かもしれないです。(環境差かもしれないですが)

Java配列に入れる

/**
 * 禁則文字列
 */

// 使用不可能な記号
public static final String[] PROHIBITED_SYMBOLS = {
    "\\", "/", ":", "*", "?", "\'", "\"", "<", ">"
};

// WindowsとMS-DOSの予約デバイス名
public static final String[] PROHIBITED_CHARACTERS = {
    "CON", "PRN", "AUX", "CLOCK$", "NUL",
    "COM0", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9",
    "LPT0", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9"
};
twitterfacebookhatenafacebook