トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

技術的雑談-Javaでファイル名として使えない文字

技術的雑談-Javaでファイル名として使えない文字


 環境

  • Java : 1.6.0u03 (jdk.1.6.0_03)
  • OS: RedHat Linux 5.0とWindowsXPsp2(NTFS)で検証

 調査内容

Java内でjava.io.File()を使ってファイルを作成/削除するときに問題となる文字を調べてみた。

 テストプログラム

import java.io.File;
import java.io.IOException;


public class Test {

	public static void main(String[] args) {
		System.out.println("******** START ********");
		
		File tmp = new File(System.getProperty("user.dir"), "/tmp");
		tmp.mkdir();
		
		String head = "";
		String tail = "";
		for (int x = 0; x < 4; ++x) {
			if (x == 1) {
				head = "x";
			}
			if (x == 2) {
				head = "";
				tail = "a";
			}
			if (x == 3) {
				head = "x";
				tail = "a";
			}
			
			for (char i = ' ' ; i <= '~'; ++ i) {
				if (!tmp.isDirectory()) {
					tmp.delete();
					tmp.mkdir();
				}
				String a = head + new String(new char[]{i}) + tail;
				if (i == 92) {
					a = head + "\\" + tail;
				}
				
				File file = new File(tmp, a);
				System.out.print("Testing [" + a + "] : " + file.toString() + " ");
				if (file.exists()) {
					boolean deleted = file.delete();
					if (!deleted) {
						System.out.println("file [" + a + "] is already present and could not delete ! ");
						continue;
					}
				}
				
				boolean created = false;
				try {
					created = file.createNewFile();
					if (created) {
						System.out.println(" OK");
					} else {
						System.out.println(" NG !!");
					}
				} catch (IOException e) {
					System.out.println(" FAILED !! " + e.getMessage());
				}
			}
			System.out.println();
		}
		System.out.println("******** END ********\n");
	}

}

''#途中の「\」の操作とかはいらない気もするが…(内緒)

 結果


Linux(RedHad5.1)


  • だめな文字:「/」(ディレクトリ区切りだから)
  • だめなファイル名:「.」(カレントディレクトリの特殊ファイル名)、「..」(親ディレクトリの特殊ファイル名)

WindowsXP(NTFS)


  • だめな文字:「\/:*?<>|"」(Explorerで名前変換中に入力するとバルーンヘルプが出る)
  • 先頭の「 」(半角スペース。無視される。スペースの後に文字が続けばエラーにはならない。)
  • Explorerから「.」だけ(入力できない)
  • Explorerから「..」だけ(入力できない)

Java的にダメっぽい文字


  • ファイル名最後の「\」(「\\」にしてもなくなってしまう。但し、bashから「touch 'a\'」を実行すると「a\」というファイルは作られる。)

 所感

意外とLinuxって優秀。(なにを?)
Windows上でJavaのデバッグをやっていると、サーバ(Linux)に移した時に動かなくなることはなさそうだけど、余計な制約がつきそうですね。
Webから入力された文字列をファイル名に含める場合などの時は思わぬエラーが出ることもありそうなので、サニタイズを忘れずに。

 履歴

2007/12/14 -- 初版

技術的雑談へ戻る

 突っ込み

name   comment  
URL (入力するとす ぱ むとみなします!)


技術的雑談へ戻る

TrackBack

TrackBack URL for this entry:
http://www.himajin2001.com/fswiki/tb.cgi/%B5%BB%BD%D1%C5%AA%BB%A8%C3%CC%2DJava%A4%C7%A5%D5%A5%A1%A5%A4%A5%EB%CC%BE%A4%C8%A4%B7%A4%C6%BB%C8%A4%A8%A4%CA%A4%A4%CA%B8%BB%FA

技術的雑談へ戻る

最終更新日時:最終更新時間:2007年12月14日 16時31分49秒
トップページに戻る