2012-06-07 22 views
28

Tengo que importar datos de un archivo de Excel a la base de datos y, para ello, me gustaría verificar la extensión del archivo elegido.Comprobar la extensión de archivo en Java

Este es mi código:

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

pero siempre me sale:

Elija un archivo de Excel!

No puedo encontrar lo que está mal con mi código, podría alguien por favor ayuda.

+0

¿Qué valor se pone la variable 'extension'? Gran pregunta sobre comparaciones de cadenas: http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java – maksimov

+3

Como regla general, use 'equalsIgnoreCase()' siempre que vaya a verificar para la igualdad entre cadenas (suponiendo que desea ignorar el caso). – posdef

+1

Eeek! Este código arrojará una 'StringIndexOutOfBoundsException' cuando encuentre un nombre de archivo sin ningún punto/período. –

Respuesta

28

siguiendo

extension != excel 

debería ser

!excel.equals(extension) 

o

!excel.equalsIgnoreCase(extension) 

Véase también

+7

+1 En realidad debería ser '! Excel.equalsCaseIgnore (extensión)';) –

+0

@peter sí lo agregó en la respuesta –

+2

aha. buena trampa Peter, cuidadosamente colocado. en realidad es 'equalsIgnoreCase()' not 'equalsCaseIgnore'. @JigarJoshi no, no es 'o igual a IgnoreCase', realmente _debería ser 'igual a IgnoreCase' y no' igual'. – maksimov

1

uso iguales() método en lugar de ! = símbolos en su caso. Me refiero a escribir

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

Gracias hombre. Soy un poco nuevo en Java, ¿podrías darme una explicación? Utilicé e.getActionCommand() == "ApproveSelection" para verificar si se hace clic en el botón Abrir en un FileChooser y está funcionando. ¿Cuál es la diferencia? – Joe88

+0

@ Joe88 en resumen == verificará la referencia pero es igual a() verifica el contenido. Puedes obtener muchos artículos en este concepto. Entonces, googlea para saber más. –

+0

@ Joe88 en general, para JVM '" ApproveSelection "' es una constante, por lo tanto, ActionCommand que se ha formado con el mismo '" ApproveSelection "' señalará internamente a la misma memoria. – maksimov

3

uso

excel.equals(extension) 

or 

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

} 

deben utilizarse como

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

} 

Y

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

como

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

-1 para código incorrecto. Realmente quieres ejecutar 'equals' en la constante, no en la variable, porque tu variable puede ser' null'. Así que '" OK ".equalsIgnoreCase (upload)' siempre es mejor que lo contrario. – maksimov

+0

@maksimov: se actualizó la respuesta. – amicngh

+0

gracias, pero su actualización no mejoró nada en relación con lo que dije anteriormente. – maksimov

7

== pruebas referentially equality. Para la prueba de igualdad de valores, use .equals. Use String#equalsIgnoreCase si desea que el caso no se tenga en cuenta durante la prueba de igualdad.

Otra cosa: no reinventar la rueda, a menos que esté muy rota. En su caso, debe utilizar Apache Commons 'FilenameUtils#isExtension para verificar la extensión.

+0

Podría necesitar reducir las dependencias por una razón u otra, lo que quiere hacer es algo tan simple que en realidad no aconsejaría agregar una dependencia solo por eso. – posdef

+0

@posdef, a la derecha. Al menos debería factorizarlo en un método diferente. – missingfaktor

+0

@posdef, por cierto, si nos fijamos en el origen de 'FilenameUtils # isExtension', notará que la tarea no es tan simple como parece. – missingfaktor

0

¿Qué tal

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

?

+0

¿Coincidirá con mi archivo llamado 'fooxls'? ¿Qué tal 'foo.barxls'? –

0

En mi Programm lo hice

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

por favor brinde más detalles. – ppasler

+0

Mi ejemplo muestra la forma simple de verificar la extensión de archivo. Quise decir que necesitas tomar el nombre del archivo y verificar que esta cadena haya necesitado símbolos al final –

Cuestiones relacionadas