package LeerDocument;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.JList;
import javax.swing.JOptionPane;
import org.apache.commons.io.FilenameUtils;
/**
* Aprende Java con Yacoobs
* @author Yacoobs C. M.
* https://www.youtube.com/channel/UChFlaF3Ji9vWhizWyhBQdBg?view_as=subscriber
* Para contactar conmigo: reyrelampago2005@gamil.com
* Dia Creación 07-feb-2019
* Tiempo Creación 14:00:00
*
* Esta clase precisa de tres argumentos, se encarga de obtener todos los archivos de una ruta y agregalos a un JList siempre y cuando sus
* extensiones concuerden con el ArrayList<?>. devuelve al finalizar un ArrayList<?> que se usa despues para pasar las rutas de los archivos.
* La clase tambien implementa la la Clase Comparable junto con su metodo sort()... para hacer un ordenamiento por tamaño de archivo.
*
*/
public class AgregarArchivos
{
private boolean Active_Ruta, Active_Ruta1, Active_Ruta2, Active_Ruta3, Active_Ruta4;
public ArrayList<String> introduceFiles(String ruta, JList<String> jList, ArrayList<String> list_ext, boolean Active_Ruta, boolean Active_Ruta1, boolean Active_Ruta2, boolean Active_Ruta3, boolean Active_Ruta4)
{
this.Active_Ruta = Active_Ruta;
this.Active_Ruta1 = Active_Ruta1;
this.Active_Ruta2 = Active_Ruta2;
this.Active_Ruta3 = Active_Ruta3;
this.Active_Ruta4 = Active_Ruta4;
//Creamos un ArrayList donde vamos almacenar los archivos con las extensiones posibles.
ArrayList<String> arraylistDatos = new ArrayList<>();
//Llamamos al metodo para que agregue todos los archivos de las rutas mas la ruta por defecto.
ArrayList<String> list_Files = agrega_Rutas(ruta);
//Agregamos todos los archivos que contenga la ruta especifica con el metodo .list();
String []agrega_Files = new String[list_Files.size()];
int t=0;
for (String file : list_Files)
{
agrega_Files[t] = file;
t++;
}
//Recorremos el Array con un bucle forEach para almacenar los posibles archivos con extensiones.
for (String objeto : agrega_Files)
{
//Evaluamos las posibles extensiones que contempla el ArrayList<?>.
list_ext.forEach((String extt) ->
{
//Obtenemos la extension del archivo (Este metodo precisa de una libreria EXTERNA).
String Extension = FilenameUtils.getExtension(objeto);
//Evaluamos que la extension obtenida sea igual que la pasada por el ArrayList.
if (Extension.equalsIgnoreCase(extt))
//Agregamos el objeto al ArrayList.
arraylistDatos.add(objeto);
});
}
//Creamos un Arreglo de clase donde almacenaremos todos los datos pertinentes de los archivos el tamaño del arreglo depende del Arreglo arrylistDatos.
OrdenarTamanoFile []datosfiles = new OrdenarTamanoFile[arraylistDatos.size()];
int indice=0;
for (String path: arraylistDatos)
{
File file = new File(path);
datosfiles[indice] = new OrdenarTamanoFile(path, file.getName(), FilenameUtils.getExtension(path), getPesofile(path));
indice++;
}
//Usamos la Clase Arrays con su metodo sort() para hacer un ordenamiento de datos.
Arrays.sort(datosfiles);
//Eliminamos todo el contenido del ArrayList<> para pasar el nuevo y ordenado Arreglo.
arraylistDatos.clear();
//Vamos a dar un tamaño Exacto de datos para el Arreglo de String.
agrega_Files = new String[datosfiles.length];
indice=0;
for (OrdenarTamanoFile obtenerdatos: datosfiles)
{
File file = new File(obtenerdatos.getPath());
//Agregamos a la vez en los dos Array en uno el nombre del archivo en el otro la ruta de acceso al archivo.
agrega_Files[indice] = file.getName();
arraylistDatos.add(obtenerdatos.getPath());
indice++;
}
//Por ultimo para terminar con el metodo de la clase añadimos el contenido del Arreglo de String al JList
jList.setListData(agrega_Files);
//Datos finalizados mostrados en consola
/*for (OrdenarTamanoFile d: datosfiles)
{
System.out.println(d.getNombrefile() +"\t\t\t"+d.getExtensionfile()+"\t\t"+d.getPath()+"\t"+d.getPesofile());
}
System.out.println("-------------------------------");
*/
return arraylistDatos;
}
//Metodo encargado de obtener el bytes el tamado de los archivos al mismo tiempo redondea la variable arriba.
public long getPesofile(String rutaFile)
{
File file = new File(rutaFile);
return Math.round(Math.ceil(file.length()));
}
//Metodo encargado de preparar las diferente rutas para obtener archivos.
public ArrayList<String> agrega_Rutas(String ruta)
{
String r1 = System.getProperty("user.home")+"/Videos";
String r2 = System.getProperty("user.home")+"/Pictures";
String r3 = System.getProperty("user.home")+"/Music";
String r4 = System.getProperty("user.home")+"/Downloads";
ArrayList<String> allFiles = new ArrayList<>();
//Agregamos todos los archivos que contenga la ruta especifica con el metodo .list();
String []rut_default = new File(ruta).list();
String []rut_videos = new File(r1).list();
String []rut_imagenes = new File(r2).list();
String []rut_musica = new File(r3).list();
String []rut_descarga = new File(r4).list();
if (Active_Ruta)
Anadir_File(rut_default, allFiles, ruta);
if (Active_Ruta1)
Anadir_File(rut_videos, allFiles, r1);
if (Active_Ruta2)
Anadir_File(rut_imagenes, allFiles, r2);
if(Active_Ruta3)
Anadir_File(rut_musica, allFiles, r3);
if (Active_Ruta4)
Anadir_File(rut_descarga, allFiles, r4);
return allFiles;
}
//Metodo que devuelve un ArrayList con toda la lista de archivos contenidos en los directorios ruta.
public ArrayList<String> Anadir_File(String []arreglo, ArrayList<String> arraylist, String rutt)
{
try
{
for (String arreglo1 : arreglo) {
arraylist.add(rutt + "/" + arreglo1);
}
return arraylist;
}catch(NullPointerException e)
{
JOptionPane.showMessageDialog(null, "El directoria al que hace referencia no exite!!", "Error", 0);
System.out.println("Error en vinculacion de una ruta " + rutt + "\n" + e);
System.out.println(getClass());
}
return null;
}
//Clase que implementa la inteface Comparable encargada de ordenar el Array de Clase.
private class OrdenarTamanoFile implements Comparable
{
public String path, nombrefile, extensionfile;
public long pesofile;
public OrdenarTamanoFile(String path, String nombrefile, String extensionfile, long pesofile)
{
this.path = path;
this.nombrefile = nombrefile;
this.extensionfile = extensionfile;
this.pesofile = pesofile;
}
public String getPath() {
return path;
}
public String getNombrefile() {
return nombrefile;
}
public String getExtensionfile() {
return extensionfile;
}
public long getPesofile() {
return pesofile;
}
@Override
public int compareTo(Object objeto)
{
OrdenarTamanoFile elementodato = (OrdenarTamanoFile) objeto;
if (this.pesofile < elementodato.pesofile)
return -1;
else
return 1;
}
}
}