2009-08-17 11 views
12

フォルダのファイル名はList<String>、ファイル名はStringです。ファイル名がリストに含まれているかどうかを検出したいが、大文字と小文字を区別するかどうかの根底にあるファイルシステムの特性を尊重する必要がある。ファイルシステムで大文字と小文字が区別されるかどうかを検出するにはどうすればよいですか?

これを行う簡単な方法はありますか(System.getProperty("os.name", "").toLowerCase().indexOf("windows")!=-1の「ハック」以外)ですか? ;-)

+0

「大文字と小文字を区別しないファイルシステム」は、「OSはWindows」と同じではありません。 Windows、Linux、Mac OSはすべて大文字と小文字を区別しないファイルシステムを使用できます。概念を混同しないでください。 "ハック"は、小文字のファイル名が存在しないことを主張することです。大文字でその名前の(一時的な)ファイルを作成し、小文字の名前付きファイルが存在するかどうかを確認します。 –

答えて

11

ファイルを表すために文字列を使用しないでください。 java.io.Fileのを使用します。

http://java.sun.com/javase/6/docs/api/java/io/File.html#equals(java.lang.Object)

+0

ええ、これは私が思う最もエレガントで安定したソリューションです... – Epaga

+1

さらに、ディレクトリのFileオブジェクトのlistFiles()メソッドを使用して、ディレクトリからファイルの配列を取得できます。これは配列として操作することも、Arrays.asListを使ってリストに変換することもできます。 – Powerlord

+0

基本的にlistFilesメソッドにlist()メソッドを変更しました... – Epaga

1

"HelloWorld"という名前のファイルを作成します。 "hELLOWORLD"という名前のファイルを読み込もうとしていますか?

1
boolean isFileSystemCaseSensitive = !new File("a").equals(new File("A")); 
+4

Mac OSXでこれをテストしましたが、大文字と小文字を区別しないデフォルトのファイルシステムであり、期待される結果が返されません。 – SaM

+0

ファイルシステムを考慮していないことに注意してください。ちょうどOS - この回答は受け入れられたものより悪くありません。あなたが気づいている限り、それは問題ありません。私はFSを考慮に入れるより良い解決策を見つけることができなかったので、私はそれを取るでしょう。 +1 – NickSoft

2

あなたがIOCaseを使用することができますように見えます。

+2

再び - OS Xではうまくいきません。大文字と小文字は区別されますが、ファイル区切り記号はスラッシュです。もっと詳しくは、devs間のこのディスカッションを参照してください:https://issues.apache.org/jira/browse/IO-171 –

関連する問題