2009-08-17 8 views
12

Mam List<String> nazw plików z folderu i pewną nazwę pliku jako String. Chcę wykryć, czy nazwa pliku znajduje się na liście, ale musi być zgodna z własnością systemu plików bazowych, czy rozróżniana jest wielkość liter.Jak wykryć, czy w systemie plików rozróżniana jest wielkość liter?

Czy jest jakiś łatwy sposób to zrobić (inne niż "hack" sprawdzania System.getProperty("os.name", "").toLowerCase().indexOf("windows")!=-1)? ;-)

+0

Pamiętaj, że "system plików niewrażliwy na wielkość liter" nie jest jednak taki sam jak "system operacyjny to Windows". Wszystkie systemy Windows, Linux i Mac OS mogą wykorzystywać rozróżnianie wielkości liter i wielkości liter; nie mylić pojęć. "Hack" będzie twierdzić, że nazwa pliku małej litery nie istnieje; utwórz plik (tymczasowy) o tej nazwie wielkimi literami, a następnie sprawdź, czy plik o małych nazwach istnieje. –

Odpowiedz

11

Nie używaj napisów do reprezentowania plików; używać java.io.File:

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

+0

tak, jest to najbardziej eleganckie i stabilne rozwiązanie, które myślę ... – Epaga

+1

Jako dodatkową notatkę można uzyskać szereg plików z katalogu przy użyciu metody FileFiles() File w obiekcie File dla wspomnianego katalogu. To może być następnie zmanipulowane jako tablica lub przekonwertowane na listę przy użyciu Arrays.asList – Powerlord

+0

tak po prostu zmieniłem metodę list() na metodę listFiles ... – Epaga

1

Napisz plik o nazwie "HelloWorld"; spróbować odczytać plik o nazwie "HELLOwORLD"?

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

Właśnie przetestowałem to w systemie Mac OSX, domyślnym systemie plików niewrażliwym na wielkość liter i nie zwraca oczekiwanego wyniku. – SaM

+0

Pamiętaj, że nie bierze on pod uwagę systemu plików, tylko system operacyjny - ta odpowiedź nie jest gorsza od zaakceptowanej. Dopóki jesteś świadomy, że wszystko jest w porządku. Przyjmę to, ponieważ nie mogłem znaleźć lepszego rozwiązania, które bierze pod uwagę FS. +1 – NickSoft

2

Wygląda na to, można użyć IOCase.

+2

Znowu - bardzo dobrze nie działa na OS X. Po prostu przybiera wielkość liter, ponieważ separatory plików to ukośniki w przód! Zobacz tę dyskusję między twórcami, aby uzyskać więcej informacji: https://issues.apache.org/jira/browse/IO-171 –

Powiązane problemy