[SOLUCIONADO]listar directorios utilizando hilos

Iniciado por danielo-, 4 Noviembre 2009, 18:35 PM

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

danielo-

De  nuez por aki, y como siempre preocupado porque no me sale el maldito codigo, espero puedan ayudarme, necesito listar un directorio, ya lo hago, pero cuando se trata de un directorio muy grande se tada mucho como era de esoerarse, entonces el profe nos recomendo utilizar hilos en el listado, pero ya intente de todo y nomas no me sale, porfa ayuda!!!, aki les dejo el codigo:

import java.awt.List;
import java.io.File;
import java.awt.List;
import java.util.Vector;

class Lista{
File [] lista;
List lArchivos,lPaths,lEnvio;
String dArchivos[],dPaths[],dEnvio[];
   
String [] path;
String [] list;
List ml,ml2;
Vector vc;
   
   public Lista(){
      lArchivos=new List();
      lPaths=new List();
      lEnvio=new List();
   }
   
   public Lista(List l,Vector x){
      vc=x;
      ml=l;
      ml2=new List();
   }
// aki empieza lo bueno   
   public void listar(File f){
      File [] lista=f.listFiles();
      
      for(int x=0;x<lista.length;x++){
         try{
         if(!lista
  • .isDirectory()){
                lArchivos.add(lista
  • .getName());
                lPaths.add(lista
  • .getAbsolutePath());
                lEnvio.add((lista
  • .length()+"b:"+lista
  • .getName()));
                System.out.println(lista
  • .length()+"b:"+lista
  • .getName());
             }
             
             if(lista
  • .isDirectory()){
                listar(lista
  • );
             }
             }
             catch(Exception e){
                System.out.println("exception 4");
             }
          }
                  //hasta aki
          dArchivos=lArchivos.getItems();
          dPaths=lPaths.getItems();
          dEnvio=lEnvio.getItems();
       }
    }

kinos

En esta parte:

// aki empieza lo bueno   
   public void listar(File f){
      File [] lista=f.listFiles();
     
creo que no te puedes librar de hacer "f.listFiles()" y utilizar una forma con multihilo (si hay no la sé).
Lo que sí puedes hacer es a partir de este punto emplear un hilo para listar recursivamente cada directorio. :huh: Bufff no se como podrías ir guardando la información de cada hilo... y muchos hilos no creo que sea bueno.

Leyer

#2
asi lo hice usando un hilo creo mas rapido y compacto imposible ::)
Código (java) [Seleccionar]

import java.io.File;
import java.util.ArrayList;
/*
* @author L-EYER
*/
public class listFiles extends Thread{
private File file = null;
private ArrayList<File> arrayListFiles     = new ArrayList<File>();
private ArrayList<File> arrayListDir       = new ArrayList<File>();
private ArrayList<File> arrayListFilesHiden= new ArrayList<File>();
int size = 0;
private File[]         list        = null;
public listFiles(String path){
super(":");
setPriority(MAX_PRIORITY);
file = new File(path);
}
@Override
public void run() {
list = file.listFiles();
size = list.length;
for(int index=0;index<size;index++){
      if(list[index].isFile()){     arrayListFiles     .add(list[index]);
}else if(list[index].isDirectory()){arrayListDir       .add(list[index]);
}else if(list[index].isHidden()){   arrayListFilesHiden.add(list[index]);
}
}
System.out.println("- [Directorios] -");
System.out.println(arrayListDir);
System.out.println("\n");
System.out.println("-  [Archivos]   -");
System.out.println(arrayListFiles);
}
public ArrayList<File> getArrayListFiles() {
return arrayListFiles;
}
public void setArrayListFiles(ArrayList<File> arrayListFiles) {
this.arrayListFiles = arrayListFiles;
}
public ArrayList<File> getArrayListDir() {
return arrayListDir;
}
public void setArrayListDir(ArrayList<File> arrayListDir) {
this.arrayListDir = arrayListDir;
}
}
class mainClass{
public static void main(String[] args){
String path = "C:\\WINDOWS\\System32";
if(new File(path).exists()){
listFiles listfiles = new listFiles(path);
listfiles.start();
}
}
}


Saludos gente.

Leyer

no se como cuantos archivos quieres listar pero mi metodo lista el system32 en menos de 2 sg :rolleyes:


cyberserver

otro codigo
File dir = new File("C:\\Users\\Los_flais\\Documents");
    String[] ficheros = dir.list();
    if (ficheros == null)
  System.out.println("No hay ficheros en el directorio especificado");
else {
  for (int x=0;x<ficheros.length;x++)
    JOptionPane.showMessageDialog(null,ficheros[x]);
}


sta padre pero no es lo que busco, pues solo me muestra los archivos que estan sobre la ruta que yo di mas no los que estan dentro de las subcarpetas.... el codigo que viene aii es casi igual al que puse en este tema!!!

Si alguien me puede ayudar con esto seria fantastico
Lo que intento hacer es como un tree






1mpuls0

Cita de: cyberserver en  5 Diciembre 2009, 06:36 AM
otro codigo
File dir = new File("C:\\Users\\Los_flais\\Documents");
    String[] ficheros = dir.list();
    if (ficheros == null)
  System.out.println("No hay ficheros en el directorio especificado");
else {
  for (int x=0;x<ficheros.length;x++)
    JOptionPane.showMessageDialog(null,ficheros[x]);
}


sta padre pero no es lo que busco, pues solo me muestra los archivos que estan sobre la ruta que yo di mas no los que estan dentro de las subcarpetas.... el codigo que viene aii es casi igual al que puse en este tema!!!

Si alguien me puede ayudar con esto seria fantastico
Lo que intento hacer es como un tree

Casi igual de donde??  :xD

Cómo???, por que dices que no te sirve?  :xD, si te lista los subdirectorios
Utiliza tu imaginación :xD :xD

Saludos
abc

cyberserver

La accion de los codigos es similar...... no me referia a tamaño o sintaxis  :rolleyes:


Pues si se podia usar la imaginacion usando recursividad pero es un trabajo muy laborioso es por ello que busco otras soluciones .

Pero pues seguire buscando suerte!!!






cyberserver

lo encontre por aii no eran tan dificil si lo analizamosss eaea



import java.io.File;


public class ListarDirectorioRecursivamente {

       
        public static void listarDirectorio(File f, String separador){
                File[] ficheros = f.listFiles();
                               
                for (int x=0;x<ficheros.length;x++){                   
                        System.out.println(separador + ficheros[x].getName());
                       
                        if (ficheros[x].isDirectory()){
                                String nuevo_separador;
                                nuevo_separador = separador + " ";
                                listarDirectorio(ficheros[x],nuevo_separador);
                        }
                }     
        }
       
       
        public static void main(String[] args) {
               
                String sDirectorio = "c:\\windows";
                File directorio = new File(sDirectorio);
               
                listarDirectorio(directorio,"");

        }

}