Obtener la extensión de un archivo en Java

Bonjour, comment obtenir l'extension d'un fichier en Java ou bien quelle méthode peut le faire ? et merci d'avance

Configuration: Windows XP Firefox 2.0.0.20

3 respuestas

  1. Colaborador
    Hello Yuri,
    There is no method to do that (in general an extension is useless).

    If you want to fetch the extension yourself, you need to use the split(".") method of the String class. You retrieve the last entry of the returned array and that’s it!

    Best regards,
    --
    rtfm and jfgi
    Simple "merci" makes helping people happy :)
    1
    1. Muchas gracias
      0
  2. "ruta" puede ser solo el nombre del archivo:

    String ruta = "mon/chemin/de/fichier/Fichier.toto.txt";
    String ext = ruta.substring(ruta.lastIndexOf(".")); //recupera la extensión
    System.out.println(ext); //-> .txt
    1
    1. Moderador
      Atención: hay que prever el caso en que no haya extensión (no es obligatoria).
      En particular, desconfiar de rutas de acceso que contengan un punto en el nombre de la carpeta o archivos ocultos bajo Linux cuyo nombre comience por un punto (pero que no sea la extensión) !

      A continuación algunos ejemplos de rutas de acceso y resultado esperado

      "C:\test\test.txt" o "/test/test.txt" --> "txt" "C:\test\test" o "/test/test" --> "" "C:\test.test\test" o "/test.test/test" --> "" "C:\test\.test" o "/test/.test" --> ""
      0
  3. Excepción en el hilo "main" java.lang.NullPointerException
    en pdf.<init>(pdf.java:30)
    en nn.main(nn.java:11)

    voilà la clase pdf:

    import java.io.File;
    import java.util.Stack;

    public class pdf {
    public pdf() {
    Stack<string> pile=new Stack();
    String dd="d:/";
    String v;
    int i;
    boolean bol=false;
    String h="pdf";
    File[] lis=null;
    i=0;

    while(bol==false)
    {
    // dd=(String) pile.pop();
    File g=new File(dd);

    lis=g.listFiles();

    i=0;

    while(i<lis.length if="" else="" v="getExtension(lis[i]);" fichier="" lis="" i="i+1;" pile.pop="" public="" static="" string="" getextension="" f="" null="" filename="f.getName();" int="">0 && i<filename.length return="" filename.substring="" null="" et="" la="" classe="" main:="" import="" java.io.ioexception="" public="" class="" nn="" static="" void="" main="" arguments="" throws="" ioexception="" pdf="" mm="new" merci="" d="" /></lis.length></string></init>
    0
    1. Colaborador
      Hola Yuri648,
      Ya que es un placer ver que después de haberte explicado que había que usar ya sea un ArrayDeque o una LinkedList para implementar pilas, uses una Stack. En fin, haz como quieras...

      ¿Puedes decirme en qué línea se genera esta excepción, por favor (ponmela en negrita), y vuelve a publicar tu mensaje con sangría y usando la etiqueta CODE, por favor?

      Gracias,
      --
      rtfm y jfgi
      Simple "gracias" hace que ayudar a la gente sea feliz :)
      0
    2. Gracias por responderme. El error viene de esa instrucción
      while(i<lis.length)

      y si cambio la variable dd="c:/exe" no hay problema, pero si dd="c:/" sí aparece ese error.
      0
    3. Colaborador
      ¿Desarrollas con Eclipse?

      ¿Existe realmente tu directorio d:/?
      Verifica el valor de lis después de lis = g.listFiles();

      Atentamente,
      --
      rtfm y jfgi
      Simple "gracias" hace que ayudar a las personas sea feliz :)
      0
    4. sí, desarrollo con Eclipse, el directorio existe y he verificado, lee archivos
      0
    5. Colaborador
      Tienes una herramienta maravillosa en Eclipse: el depurador (simplemente genial).
      Para descubrir de dónde proviene tu problema, coloca un punto de interrupción en esta línea: while(i<lis.length).

      Luego, inicia la ejecución en modo de depuración (el escarabajo pequeño o F11), y tu programa se detendrá en cada paso por esta línea (es decir, en cada iteración del bucle), y te mostrará el estado de las variables en ese momento.

      Así podrás identificar exactamente en qué momento falla tu programa (mirando el valor de i...).

      Comprende bien que tengo bastantes dificultades para ayudarte porque no tengo el mismo sistema de archivos que tú (y que, de mi lado, con c:/, el programa funciona sin problema).

      Atentamente,
      --
      rtfm and jfgi
      Simple "merci" hace feliz a quien ayuda :)
      0