Foro de elhacker.net

Programación => 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.
Código:
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
  1. import java.util.jar.*;
  2. import java.util.*;
  3. import java.io.*;
  4.  
  5. public class PackageUtils {
  6.  
  7. private static boolean debug = true;
  8.  
  9. public static List getClasseNamesInPackage
  10.     (String jarName, String packageName){
  11.   ArrayList classes = new ArrayList ();
  12.  
  13.   packageName = packageName.replaceAll("\\." , "/");
  14.   if (debug) System.out.println
  15.        ("Jar " + jarName + " looking for " + packageName);
  16.   try{
  17.     JarInputStream jarFile = new JarInputStream
  18.        (new FileInputStream (jarName));
  19.     JarEntry jarEntry;
  20.  
  21.     while(true) {
  22.       jarEntry=jarFile.getNextJarEntry ();
  23.       if(jarEntry == null){
  24.         break;
  25.       }
  26.       if((jarEntry.getName ().startsWith (packageName)) &&
  27.            (jarEntry.getName ().endsWith (".class")) ) {
  28.         if (debug) System.out.println
  29.           ("Found " + jarEntry.getName().replaceAll("/", "\\."));
  30.         classes.add (jarEntry.getName().replaceAll("/", "\\."));
  31.       }
  32.     }
  33.   }
  34.   catch( Exception e){
  35.     e.printStackTrace ();
  36.   }
  37.   return classes;
  38. }
  39.  
  40. /**
  41. *
  42. */
  43.  public static void main (String[] args){
  44.   List list =  PackageUtils.getClasseNamesInPackage
  45.        ("C:/j2sdk1.4.1_02/lib/mail.jar", "com.sun.mail.handlers");
  46.   System.out.println(list);
  47.   /*
  48.    output :
  49.    
  50.     Jar C:/j2sdk1.4.1_02/lib/mail.jar looking for com/sun/mail/handlers
  51.     Found com.sun.mail.handlers.text_html.class
  52.     Found com.sun.mail.handlers.text_plain.class
  53.     Found com.sun.mail.handlers.text_xml.class
  54.     Found com.sun.mail.handlers.image_gif.class
  55.     Found com.sun.mail.handlers.image_jpeg.class
  56.     Found com.sun.mail.handlers.multipart_mixed.class
  57.     Found com.sun.mail.handlers.message_rfc822.class
  58.     [com.sun.mail.handlers.text_html.class,
  59.     com.sun.mail.handlers.text_xml.class,  com
  60.     .sun.mail.handlers.image_jpeg.class,
  61.     , com.sun.mail.handlers.message_rfc822.class]
  62.    
  63.    */
  64.  }
  65. }
  66.  
  67.  


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