Filtrar archivos dentro de un jar ¿?

Iniciado por 1mpuls0, 22 Agosto 2009, 20:10 PM

0 Miembros y 1 Visitante están viendo este tema.

1mpuls0

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





abc

kinos

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]
   
   */
  }
}


1mpuls0

Excelente esto es mas de lo que buscaba  ;-)
Esta clase ya casi hace todo por mi  ;D

Muchas gracias kinos :D

Saludos
abc