2009-08-17 4 views
12

폴더의 파일 이름이 List<String>이고 특정 파일 이름이 String입니다. 파일 이름이 목록에 있는지 여부를 감지하려고하지만 대소 문자를 구분할지 여부에 대한 기본 파일 시스템의 특성을 고려해야합니다.파일 시스템이 대소 문자를 구분하는지 어떻게 감지합니까?

간편한 방법 (System.getProperty("os.name", "").toLowerCase().indexOf("windows")!=-1을 확인하는 "해킹"제외)이 있습니까? ;-)

+0

"대소 문자를 구별하지 않는 파일 시스템"은 "OS is Windows"와 동일하지 않습니다. Windows, Linux 및 Mac OS는 모두 대소 문자를 구분하거나 대소 문자를 구분하지 않는 파일 시스템을 사용할 수 있습니다. 개념을 혼동하지 마십시오. "해킹"은 소문자 파일 이름이 존재하지 않는다는 것을 주장하는 것입니다; 그 이름을 가진 (임시) 파일을 대문자로 작성한 다음 소문자로 명명 된 파일이 있는지 확인하십시오. –

답변

11

파일을 나타내는 데 문자열을 사용하지 마십시오. java.io.File의 사용 :이 IOCase을 사용할 수 있습니다처럼

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

+0

그래, 내가 생각하는 가장 우아하고 안정적인 솔루션이다. – Epaga

+1

추가 정보로,이 디렉토리의 File 객체에서 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

것 같습니다.

+2

다시 - OS X에서는 잘 작동하지 않습니다. 파일 구분자는 슬래시 (/)이므로 대소 문자를 구분합니다! 자세한 내용은 devs 사이의이 토론을 참조하십시오 : https://issues.apache.org/jira/browse/IO-171 –