Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: 1mpuls0 en 22 Agosto 2009, 20:10 PM

Título: Filtrar archivos dentro de un jar ¿?
Publicado por: 1mpuls0 en 22 Agosto 2009, 20:10 PM
Hola, he estado implementando un metodo para filtrar archivos contenidos en un carpeta, y si que funciona (Al estar al mismo nivel de la clase), posteriormente los guardo en jComboBox.
El problema viene cuando esta carpeta la guardo dentro de un jar.  He intentado con InputStream en lugar de File y con FilterInputStream pero no parece funcionar y lo mas probable que esté haciendo algo (o todo) mal.
Aquí dejo mi metodo por si alguien sabe como ayudarme.


Este metodo si funciona.

private String extension = ".java";
private File file;
private File javas[];
private String clases[];
.
.
.
private void filtrar(){

    file = new File("carpeta/");
           
        FileFilter filtroJava = new FileFilter(){
public boolean accept(File file){
return file.getName().toLowerCase().endsWith(extension);
}
    };
   
    javas = file.listFiles(filtroJava);
   
    clases = new String[javas.length];
    for (int i=0; i< javas.length; i++){
            clases[i]=javas[i].getName();
        }
 
  seleccionarCodigo.setModel(new DefaultComboBoxModel(clases));
}



Saludos





Título: Re: Filtrar archivos dentro de un jar ¿?
Publicado por: kinos en 22 Agosto 2009, 20:21 PM
Holas, he encontrado esto. Me parece que lo que hace es listar los archivos contenidos en un jar. Espero que te sirva. Luego supongo que lo podrás filtrar por extensión como estas haciendo.

Código (java) [Seleccionar]

import java.util.jar.*;
import java.util.*;
import java.io.*;

public class PackageUtils {

private static boolean debug = true;

public static List getClasseNamesInPackage
     (String jarName, String packageName){
   ArrayList classes = new ArrayList ();

   packageName = packageName.replaceAll("\\." , "/");
   if (debug) System.out.println
        ("Jar " + jarName + " looking for " + packageName);
   try{
     JarInputStream jarFile = new JarInputStream
        (new FileInputStream (jarName));
     JarEntry jarEntry;

     while(true) {
       jarEntry=jarFile.getNextJarEntry ();
       if(jarEntry == null){
         break;
       }
       if((jarEntry.getName ().startsWith (packageName)) &&
            (jarEntry.getName ().endsWith (".class")) ) {
         if (debug) System.out.println
           ("Found " + jarEntry.getName().replaceAll("/", "\\."));
         classes.add (jarEntry.getName().replaceAll("/", "\\."));
       }
     }
   }
   catch( Exception e){
     e.printStackTrace ();
   }
   return classes;
}

/**
*
*/
  public static void main (String[] args){
   List list =  PackageUtils.getClasseNamesInPackage
        ("C:/j2sdk1.4.1_02/lib/mail.jar", "com.sun.mail.handlers");
   System.out.println(list);
   /*
   output :
   
    Jar C:/j2sdk1.4.1_02/lib/mail.jar looking for com/sun/mail/handlers
    Found com.sun.mail.handlers.text_html.class
    Found com.sun.mail.handlers.text_plain.class
    Found com.sun.mail.handlers.text_xml.class
    Found com.sun.mail.handlers.image_gif.class
    Found com.sun.mail.handlers.image_jpeg.class
    Found com.sun.mail.handlers.multipart_mixed.class
    Found com.sun.mail.handlers.message_rfc822.class
    [com.sun.mail.handlers.text_html.class,
    com.sun.mail.handlers.text_xml.class,  com
    .sun.mail.handlers.image_jpeg.class,
    , com.sun.mail.handlers.message_rfc822.class]
   
   */
  }
}

Título: Re: Filtrar archivos dentro de un jar ¿?
Publicado por: 1mpuls0 en 22 Agosto 2009, 21:13 PM
Excelente esto es mas de lo que buscaba  ;-)
Esta clase ya casi hace todo por mi  ;D

Muchas gracias kinos :D

Saludos