Проверьте расширение файла в Java

Я должен импортировать данные из файла Excel в базу данных и для этого я хотел бы проверить расширение выбранного файла.

Это мой код:

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!");
    }
}

Но я всегда получаю:

Choose an excel file!

Я не могу найти, что не так с моим кодом, может кто-нибудь, пожалуйста, помогите.

 shaunak111109 дек. 2013 г., 07:25
глупый код для сравнения строк с использованием! = но в любом случае помогает проверка кода расширения файла
 b1nary.atr0phy11 сент. 2013 г., 07:12
EEEK! Этот код собирается броситьStringIndexOutOfBoundsException когда он встречает имя файла без какой-либо точки / точки.
 maksimov07 июн. 2012 г., 10:40
Какое значение имеетextension переменная получить? Отличный вопрос о сравнении строк:stackoverflow.com/questions/513832/…
 posdef07 июн. 2012 г., 10:44
Как правило, используйтеequalsIgnoreCase() всякий раз, когда вы собираетесь проверять равенство между строками (при условии, что вы хотите игнорировать регистр).

Ответы на вопрос(8)

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

}

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

}

А также

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

как

 if ("OK".equals(upload)) {
 JOptionPane.showMessageDialog(null,"Upload Successful!");
}
 07 июн. 2012 г., 10:54
@maksimov: обновил ответ.
 07 июн. 2012 г., 11:00
спасибо, но ваше обновление ничего не улучшило в связи с тем, что я сказал выше.
 07 июн. 2012 г., 10:49
-1 за плохой код. Вы действительно хотите выполнитьequals на константе, а не на переменной, потому что ваша переменная может бытьnull, Так"OK".equalsIgnoreCase(upload) всегда лучше, чем наоборот.
 07 июн. 2012 г., 11:23
Спасибо, вы правы.

чтобы проверить расширение файла.

String filename = file.getName();
if(!FilenameUtils.isExtension(filename,"xls")){
  JOptionPane.showMessageDialog(null, "Choose an excel file!");
}

http://commons.apache.org/io/api-release/index.html?org/apache/commons/io/package-summary.html

if(file_name.endsWith(".xls") || file_name.endsWith(".xlsx"))
   // something works with file
 19 янв. 2017 г., 15:35
пожалуйста, предоставьте более подробную информацию.
 19 янв. 2017 г., 16:06
Мой пример показывает простой способ проверить расширение файла. Я имел в виду, вам нужно взять имя файла и проверить, что в конце этой строки нужны символы

использованиеequals() метод вместо!= символы в вашем случае. Я имею в виду написать

if (!(extension.equals(excel))){..........}
 07 июн. 2012 г., 10:49
Короче говоря, @ Joe88 == проверит ссылку, но equals () проверит содержимое. Вы можете получить много статей в этой концепции. Так что Google это узнать больше.
 07 июн. 2012 г., 10:57
@ Joe88 вообще говоря, для JVM"ApproveSelection" является константой, следовательно, ActionCommand, который был создан с тем же"ApproveSelection" внутренне будет указывать на ту же память.
 Joe8807 июн. 2012 г., 10:46
Спасибо чувак. Я немного новичок в Java, поэтому не могли бы вы дать мне объяснение? Я использовал e.getActionCommand () == & quot; ApproveSelection & quot; проверить, нажата ли кнопка «Открыть» в FileChooser и работает ли она. В чем разница?

excel.equals(extension)

or

excel.equalsIgnoreCase(extension)
Решение Вопроса

следующий

extension != excel

должно быть

!excel.equals(extension)

или же

!excel.equalsIgnoreCase(extension)

See also

String equals() versus ==
 07 июн. 2012 г., 10:47
лол, не заметил этого
 07 июн. 2012 г., 10:46
Ага. Хорошая ловушка Петра, аккуратно расставленная. это на самом делеequalsIgnoreCase() неequalsCaseIgnore, @JigarJoshi нет, это не так или равно «игнорировать», это действительноshould бытьequalsIgnoreCase и неequals.
 07 июн. 2012 г., 10:43
@peter да, добавил это в ответ
 07 июн. 2012 г., 10:56
 07 июн. 2012 г., 10:42
+1 Это должно быть на самом деле!excel.equalsCaseIgnore(extension) ;)

== проверяет ссылочное равенство. Для теста на равенство значений используйте.equals, использованиеString#equalsIgnoreCase если вы хотите, чтобы дело было проигнорировано во время теста на равенство.

Другое дело: не изобретайте колесо, если оно не сильно сломано. В вашем случае вы должны использовать Apache Commons & apos;FilenameUtils # isExtension проверить расширение.

 07 июн. 2012 г., 11:37
@posdef, кстати, если вы посмотрите на источникFilenameUtils#isExtensionВы заметите, что задача не так проста, как кажется.
 11 сент. 2013 г., 07:12
@posdef Если только он не хочет сделать его пуленепробиваемым. В этом случае ему обязательно понадобится продуманное решение.
 07 июн. 2012 г., 11:36
@posdef, верно. По крайней мере, он должен выделить это отдельным методом.
 07 июн. 2012 г., 11:35
Ему может понадобиться сократить зависимости по той или иной причине. То, что он / она хочет сделать, - это такая простая вещь, что я на самом деле не советую добавлять зависимость только для этого.
 07 июн. 2012 г., 11:41
по общему признанию, даже самые простые задачи усложняются, когда вы решаете найти обобщенные решения, охватывающие все возможные варианты. Это не означает, что ФП нужно так много сложного решения. :)

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

?

 19 февр. 2015 г., 05:12
Будет ли это соответствовать моему файлу под названиемfooxls? Как насчетfoo.barxls?

Ваш ответ на вопрос