Obtener nombre de archivo sin extensión en Java
Esta publicación discutirá cómo obtener el nombre de archivo sin extensión en Java. La solución debería devolver el nombre del archivo antes del último punto.
1. Usando String.substring()
método
La idea es utilizar el lastIndexOf()
método para obtener el índice de la última aparición del punto (.
) en el nombre de archivo dado. Luego puede extraer el nombre del archivo sin extensión usando el substring()
método, como se muestra a continuación:
1 2 3 4 5 6 7 8 |
public class Main { public static void main(String[] args) { String fileName = "filename.txt"; String fileNameWithoutExtension = fileName.substring(0, fileName.lastIndexOf('.')); System.out.println(fileNameWithoutExtension); } } |
El código anterior arroja un java.lang.StringIndexOutOfBoundsException
si el nombre del archivo no tiene extensión. Puede manejar este caso comprobando el valor de retorno de la lastIndexOf()
método, que devuelve -1
si el punto no aparece. Esto se demuestra a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class Main { private static String removeExtension(String fileName) { int lastIndex = fileName.lastIndexOf('.'); if (lastIndex != -1) { fileName = fileName.substring(0, lastIndex); } return fileName; } public static void main(String[] args) { String fileName = "filename.txt"; String fileNameWithoutExtension = removeExtension(fileName); System.out.println(fileNameWithoutExtension); } } |
2. Usando Apache Commons IO
Otra opción es utilizar el FilenameUtils
clase proporcionada por la biblioteca Apache Commons IO. Proporciona la removeExtension()
método para eliminar la extensión de un nombre de archivo. Si el nombre del archivo contiene una ruta, no la elimina.
1 2 3 4 5 6 7 8 9 10 |
import org.apache.commons.io.FilenameUtils; public class Main { public static void main(String[] args) { String fileName = "filename.txt"; String fileNameWithoutExtension = FilenameUtils.removeExtension(fileName); System.out.println(fileNameWithoutExtension); } } |
Alternativamente, también puede utilizar el getBaseName()
método de la FilenameUtils
class que además elimina la ruta del nombre del archivo (si está presente), junto con la extensión. es similar a la basename
Comando Unix.
1 2 3 4 5 6 7 8 9 10 |
import org.apache.commons.io.FilenameUtils; public class Main { public static void main(String[] args) { String fileName = "filename.txt"; String fileNameWithoutExtension = FilenameUtils.getBaseName(fileName); System.out.println(fileNameWithoutExtension); } } |
3. Usar Guava
Si su proyecto usa la biblioteca Guava sobre Apache Commons, considere usar el getNameWithoutExtension()
método de la Files
clase. Devuelve el nombre del archivo sin su extensión o ruta, similar al basename
Comando Unix.
1 2 3 4 5 6 7 8 9 10 |
import com.google.common.io.Files; public class Main { public static void main(String[] args) { String fileName = "filename.txt"; String fileNameWithoutExtension = Files.getNameWithoutExtension(fileName); System.out.println(fileNameWithoutExtension); } } |
4. Usar expresiones regulares
Otra opción es usar la expresión regular \.\w+$
con el replaceAll()
método que elimina el último punto y todos los caracteres que lo siguen.
1 2 3 4 5 6 7 8 |
public class Main { public static void main(String[] args) { String fileName = "filename.txt"; String fileNameWithoutExtension = fileName.replaceAll("\\.\\w+$", ""); System.out.println(fileNameWithoutExtension); } } |
Se trata de obtener el nombre del archivo sin extensión en Java.