Вопрос по if-statement, string, java – Проверьте расширение файла в Java

28

Я должен импортировать данные из файла 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!

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

Как правило, используйтеequalsIgnoreCase() всякий раз, когда вы собираетесь проверять равенство между строками (при условии, что вы хотите игнорировать регистр). posdef
Какое значение имеетextension переменная получить? Отличный вопрос о сравнении строк:stackoverflow.com/questions/513832/… maksimov
глупый код для сравнения строк с использованием! = но в любом случае помогает проверка кода расширения файла shaunak1111
EEEK! Этот код собирается броситьStringIndexOutOfBoundsException когда он встречает имя файла без какой-либо точки / точки. b1nary.atr0phy

Ваш Ответ

8   ответов
3

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

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

1

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

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

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

excel.equals(extension)

or

excel.equalsIgnoreCase(extension)
28

следующий

extension != excel

должно быть

!excel.equals(extension)

или же

!excel.equalsIgnoreCase(extension)

See also

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

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

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

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

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

?

Будет ли это соответствовать моему файлу под названиемfooxls? Как насчетfoo.barxls?
6
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!");
}
спасибо, но ваше обновление ничего не улучшило в связи с тем, что я сказал выше.
@maksimov: обновил ответ.
-1 за плохой код. Вы действительно хотите выполнитьequals на константе, а не на переменной, потому что ваша переменная может бытьnull, Так"OK".equalsIgnoreCase(upload) всегда лучше, чем наоборот.
Спасибо, вы правы.

Похожие вопросы