2011-12-06 10 views
17

Próbuję uzyskać nazwę obiektu File bez jego rozszerzenia, np. uzyskiwanie "roślinności", gdy nazwa pliku to "vegetation.txt". Próbowałem wykonawczych ten kod:Jak uzyskać nazwę obiektu File bez jego rozszerzenia w Javie?

openFile = fileChooser.getSelectedFile(); 
String[] tokens = openFile.getName().split("."); 
String name = tokens[0]; 

Niestety, zwraca null obiekt. Występuje problem tylko przy definiowaniu obiektu String, ponieważ metoda ta działa poprawnie; daje mi nazwę pliku z rozszerzeniem.

Masz jakiś pomysł?

Odpowiedz

36

Jeśli chcesz realizować ten sam, spróbuj tego:

String name = file.getName(); 
int pos = name.lastIndexOf("."); 
if (pos > 0) { 
    name = name.substring(0, pos); 
} 

(Ta zmiana nie robi” t zostawiają cię z pustym ciągiem znaków w nazwie pliku wejściowego do podobnego „.txt”. Jeśli chcesz być ciąg pusty w takim przypadku zmienić > 0 do >= 0.)


można wymienić if oświadczenie z przydziału za pomocą wyrażenia warunkowego, jeśli uważasz, że uczynił twój kod bardziej czytelnym; patrz na przykład odpowiedź @ Steven'a. (I nie sądzę, że robi ... ale jest to kwestia opinii.)


Jest to chyba lepszy pomysł, aby korzystać z implementacji, że ktoś inny napisał i przetestowany. Apache FilenameUtils to dobry wybór; zobacz odpowiedź @ slachnick's, a także połączony Q & A.

+0

Wielkie dzięki za rozwiązanie mojego problemu :) – MichalB

4

Wolę odciąć przed ostatnim indeksem "." być nazwą pliku. W ten sposób nazwa pliku: hello.test.txt tylko hello.test

tj

int pos = filename.lastIndexOf("."); 
String justName = pos > 0 ? filename.substring(0, pos) : filename; 

Musisz tam sobie nie jest zbyt rozszerzenie.

2

Możesz spróbować split("\\.");. Oznacza to, że w zasadzie ucieka przed ., ponieważ jest traktowane jako wszystkie znaki w regex.

2

Istnieją dwa problemy z kodem ...

1) Tylko za pomocą "". jako argument do podziału jest interpretowany jako Rejex, którego nie chcesz. Chcesz literalną kropkę. Musisz więc uciec ...

openFile.getName().split("\\."); 

2) Niepoprawnie przeanalizujesz dowolny plik z więcej niż jedną kropką. Najlepszym sposobem, aby to zrobić, to szukać ostatniej kropce i uzyskać podciąg ...

int pos = openFile.getName().lastIndexOf("."); 
if(pos != -1) { 
    String name = openFile.getName().substring(0, pos); 
} 
17

Jeśli nie chcesz samodzielnie pisać tego kodu, możesz użyć Apache's FilenameUtils.

FilenameUtils.getBaseName(openFile.getName()); 

Spowoduje to wyświetlenie nazwy pliku bez ścieżki i rozszerzenia.

Powiązane problemy