Carpetas y Ficheros en Java

/* Se construye un proyecto para representar carpetas y ficheros como clases derivadas de una clase base (abstracta) llamada clase Archivo. El atributo general de un archivo es su nombre, que es completado con el atributo de tamaño en un fichero y los atributos de array de archivos y el número de archivos reales en una carpeta. Los correspondientes métodos de añadir y borrar archivos son construidos al efecto. */

package ficherosycarpetas;
import java.util.Scanner;

/****** CLASE BASE: clase Archivo *****/

public abstract class Archivo {

    private String nombre;

          /**********/

    public Archivo(String nombre)
    {
        this.nombre = nombre;
    }

         /**********/

    public String getNombre()
      { return nombre; }

    public abstract int getTamaño();
    protected abstract boolean isBorrable();
}   /****** CLASE DERIVADA: clase Fichero ***** / public class Fichero extends Archivo {

    private int tamaño;

        /**********/

    public Fichero(String nombre, int tamaño)
    {
        super(nombre);
        this.tamaño = tamaño;
    }

       /**********/

    @Override
    public int getTamaño()
    { return tamaño; }

    @Override
    protected boolean isBorrable()
    { return true;}
} /****** CLASE DERIVADA: clase Carpeta *****/

public class Carpeta extends Archivo {

    private Archivo[] archivos;
    private int narchivos;
    private static Carpeta raiz = null;

       /***********/

    public Carpeta(String nombre)
    {
        super(nombre);
        archivos = new Archivo[10];
        narchivos = 0;
    }

    public static Carpeta getRaiz()
    {
        if (raiz==null)
            raiz = new Carpeta("/");

        return raiz;
    }

        /***********/

    @Override
    public int getTamaño()
    {
        int res = 0;
        for(int i=0; i<narchivos; i++)
            res += archivos[i].getTamaño();

        return res;
    }

    private int getArchivo(String nombre)
    {
        int i;
        for(i=0; i<narchivos; i++)
            if (nombre.equals(archivos[i].getNombre()))
                return i;

        return -1;
    }

    private void incrementaCapacidad()
    {
        Archivo[] aux = new Archivo[archivos.length+10];
        System.arraycopy(archivos, 0, aux, 0, archivos.length);
        archivos = aux;
    }

    public void add(Archivo a)
    {
        if (getArchivo(a.getNombre())==-1)
        {
            if (narchivos==archivos.length)
                incrementaCapacidad();

            archivos[narchivos++] = a;
        }
    }

    public void remove(String nombre)
    {
        int i = getArchivo(nombre);
        if (i!=-1 && archivos[i].isBorrable())
            archivos[i] = archivos[--narchivos];  
        // El ultimo archivo lo ponemos colgando en la posicion i      
    }

    public void removeAll()
    {
        for(int i=0; i<narchivos; i++)
        {
            if (archivos[i] instanceof Carpeta)
            {
                Carpeta c = (Carpeta)archivos[i];
                c.removeAll();
            }
            archivos[i] = null;
        }
        narchivos = 0;
    }

    @Override
    protected boolean isBorrable()
    {
        return narchivos==0;
    }
}

/********* método main() ***********/

/*
 * @authors ARF, RLR
 */

public static void main(String[] args)
    {
         Scanner sc=new Scanner(System.in);

        Carpeta raiz = Carpeta.getRaiz();
        Carpeta a = new Carpeta("a");
        Carpeta b = new Carpeta("b");
        Carpeta c = new Carpeta("c");

        Fichero fa = new Fichero("fa", 100);
        Fichero fb = new Fichero("fb", 200);
        Fichero fbb = new Fichero("fbb", 300);
        Fichero fc = new Fichero("fc", 400);

        //raiz.add(a);
        a.add(fa);
        b.add(fb);
        b.add(fbb);
        c.add(fc);

        raiz.add(a);
        a.add(b);
        a.add(c);

        System.out.println("Tamaño de " + a.getNombre() + ": " + a.getTamaño());
        c.removeAll();
        System.out.println("Tamaño de " + c.getNombre() + ": " + c.getTamaño());
        b.remove("fb");
        System.out.println("Tamaño de " + a.getNombre() + ": " + a.getTamaño());
        a.removeAll();
        System.out.println("Tamaño de " + a.getNombre() + ": " + a.getTamaño());
        System.out.println("Tamaño de " + b.getNombre() + ": " + b.getTamaño());

        System.out.println("\n\nPulsa Tecla+Return para acabar.\n");
        String FIN=sc.next();
    }
 
Esta entrada fue publicada en Informática e Internet. Guarda el enlace permanente.

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.