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
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.
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]
*/
}
}
Excelente esto es mas de lo que buscaba ;-)
Esta clase ya casi hace todo por mi ;D
Muchas gracias kinos :D
Saludos