2012-06-07 15 views
28

Muszę zaimportować dane z pliku Excel do bazy danych i to zrobić, chciałbym sprawdzić rozszerzenie wybranego pliku.Sprawdź rozszerzenie pliku w Javie

To jest mój kod:

String filename = file.getName(); 
String extension = filename.substring(filename.lastIndexOf(".") + 1, filename.length()); 

String excel = "xls"; 
if (extension != excel) { 
    JOptionPane.showMessageDialog(null, "Choose an excel file!"); 
} 
else { 
    String filepath = file.getAbsolutePath(); 
    JOptionPane.showMessageDialog(null, filepath); 
    String upload = UploadPoData.initialize(null, filepath); 

    if (upload == "OK") { 
     JOptionPane.showMessageDialog(null, "Upload Successful!"); 
    } 
} 

ale zawsze:

Wybierz plik Excel!

Nie mogę znaleźć kodu, który mógłby mi pomóc.

+0

Jaką wartość ma zmienna extension' 'dostać? Świetne pytanie dotyczące porównań ciągów: http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java – maksimov

+3

Jako regułę kciuka używaj 'equalsIgnoreCase()' kiedy będziesz sprawdzać dla równości łańcuchów (zakładając, że chcesz ignorować przypadek). – posdef

+1

Eeek! Ten kod rzuci "StringIndexOutOfBoundsException", gdy napotka nazwę pliku bez kropki/kropki. –

Odpowiedz

28

następujące

extension != excel 

powinny być

!excel.equals(extension) 

lub

!excel.equalsIgnoreCase(extension) 

Patrz także

+7

+1 To powinno być rzeczywiście '! Excel.equalsCaseIgnore (rozszerzenie)';) –

+0

@peter tak dodano go w odpowiedzi –

+2

aha. dobra pułapka Piotra, ostrożnie ułożona. w rzeczywistości jest to 'equalsIgnoreCase()' not' equalsCaseIgnore'. @JigarJoshi nie, to nie jest "lub równeIgnoreCase", to naprawdę powinno być 'equalsIgnoreCase', a nie' equals'. – maksimov

1

użycie equals() metoda zamiast ! = symbole w Twoim przypadku. Chodzi mi napisać

if (!(extension.equals(excel))){..........} 
+0

Dzięki człowieku. Jestem trochę nowy w Javie, więc czy mógłbyś dać mi wyjaśnienie? Użyłem e.getActionCommand() == "ApproveSelection", aby sprawdzić, czy kliknięto przycisk Otwórz w FileChooser i działa. Jaka jest różnica? – Joe88

+0

@ Joe88 w skrócie == sprawdzi referencję, ale equals() sprawdzi zawartość. W tej koncepcji można uzyskać wiele artykułów. Więc google to wiedzieć więcej. –

+0

@ Joe88 ogólnie mówiąc, dla JVM '" ApproveSelection "' jest stałą, stąd ActionCommand, która została utworzona z tym samym '' ApproveSelection "' będzie wewnętrznie wskazywać na tę samą pamięć. – maksimov

3

użycie

excel.equals(extension) 

or 

excel.equalsIgnoreCase(extension) 
6
if (extension != excel){ 
    JOptionPane.showMessageDialog(null, "Choose an excel file!"); 

} 

powinien być stosowany jako

if (!extension.equals(excel)){ 
    JOptionPane.showMessageDialog(null, "Choose an excel file!"); 

} 

I

if (upload == "OK") { 
JOptionPane.showMessageDialog(null,"Upload Successful!"); 
} 

jak

if ("OK".equals(upload)) { 
JOptionPane.showMessageDialog(null,"Upload Successful!"); 
} 
+0

-1 dla złego kodu. Naprawdę chcesz wykonać 'equals' na stałej, nie na zmiennej, ponieważ twoja zmienna może mieć wartość' null'. Tak więc "OK" .equalsIgnoreCase (upload) 'jest zawsze lepsze niż na odwrót. – maksimov

+0

@maksimov: Zaktualizowano odpowiedź. – amicngh

+0

dziękuję, ale twoja aktualizacja nie poprawiła niczego w stosunku do tego, co powiedziałem powyżej. – maksimov

7

== testy równoważności względnej. Dla testu równości wartości użyj .equals. Użyj String#equalsIgnoreCase, jeśli chcesz, aby sprawa została pominięta podczas testu równości.

Inna sprawa: nie odkrywaj ponownie koła, chyba że jest ono poważnie uszkodzone. W twoim przypadku powinieneś używać Apache Commons 'FilenameUtils#isExtension, aby sprawdzić rozszerzenie.

+0

Być może będzie musiał zmniejszyć zależności z jednego lub drugiego powodu, co chce zrobić, jest tak prostą rzeczą, że nie radziłbym dodawać do tego zależności. – posdef

+0

@posdef, prawy. Przynajmniej powinien to rozłożyć na osobną metodę. – missingfaktor

+0

@posdef, przy okazji, jeśli spojrzysz na źródło 'FilenameUtils # isExtension', zauważysz, że zadanie nie jest tak proste, jak wygląda. – missingfaktor

0

Jak o

if (filename.endsWith("xls"){ 
    <blah blah blah> 
} 

?

+0

Czy to pasuje do mojego pliku o nazwie 'fooxls'? Co powiesz na 'foo.barxls'? –

0

W moim programm zrobiłem że

if(file_name.endsWith(".xls") || file_name.endsWith(".xlsx")) 
    // something works with file 
+0

proszę podać więcej szczegółów. – ppasler

+0

Mój przykład pokazuje prosty sposób sprawdzenia rozszerzenia pliku. Chodziło mi o to, że musisz wziąć nazwę pliku i sprawdzić, czy ten ciąg znaków zawierał symbole na końcu –

Powiązane problemy