Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Alguém p me ajudar? Trabalho de faculdade urgente!

Preciso entregar daqui a uma hora e meia. Não consigo imprimir assim abaixo a estrutura de pastas e arquivos: c:/ dir1 arquivo2.txt dir3 arquivo4.txt dir2 arquivo3.txt

Abaixo o código:

import java.io.IOException; import java.util.*;

// Classe ELEMENTO ----------------------------------------------------------------------------- abstract class Elemento{ private String nome;

public Elemento(String nome){
    this.nome = nome;
}

public String getNome() {
    return nome;
}

public abstract int getTamanho();

public String toString() {
    return nome;
}

}

// Classe PASTA ----------------------------------------------------------------------------- class Pasta extends Elemento { private List elementos = new ArrayList<>(); int cont = 1;

public Pasta (String nome) {
    super(nome);
}

public void adiciona (Elemento o) {
    if (o instanceof Pasta){
        ((Pasta) o).cont++;
    }
    elementos.add(o);
}

public void excluiArquivos(String palavra) {
    for (Elemento elemento : elementos) {
        if (elemento instanceof Pasta) {
            ((Pasta) elemento).remover(palavra);
        }
        else {
            if (palavra.equals(elemento.getNome())) {
                elementos.remove(elemento);
                break;
            }
        }
    }
}

public void excluirPasta(String palavra) {
    for (Elemento elemento : elementos) {
        if (palavra.equals(elemento.getNome())) {
            elementos.remove(elemento);
            break;
        } else if (elemento instanceof Pasta) {
            ((Pasta) elemento).remover(palavra);
        } else {
            System.out.println("Pasta não existe!");
        }
    }
}
/*
Remover funcionando perfeitinho!
 */
public void remover(String linha) {
    String vect[], vect2[];
    vect =  linha.split("/");
    String palavra = vect[vect.length - 1];
    vect2 = palavra.split("\\.");
    if (vect2.length == 2) {
        excluiArquivos(palavra);
    }
    else {
        excluirPasta(palavra);
    }
}

@Override
public String getNome(){
    return super.getNome();
}

@Override
public int getTamanho() {
    int tamanho = 0;
    for (Elemento elemento : elementos) {
        tamanho += elemento.getTamanho();
    }
    return tamanho;
}


/*
A questão da letra "e" a posição das pastas está funcionando, só está faltando o posicionamento dos arquivos.
Tentei muito mesmo mas não consegui uma solução. Tentei de todas as formas! Tentei um contador global,
tentei resignificar a classe Arquivo.
Enfim, vou gostar muito depois de saber como funciona.
 */
public String toString() {
    String acumula = "";
    for (Elemento elemento : elementos) {
        if (elemento instanceof Pasta) {
            for (int i = 0; i < cont; i++) {
                acumula += "\t";
            }
            acumula += elemento.toString() + "\n";
        } else {
            for (int i = 0; i < cont; i++) {
                acumula += "\t";
            }
            acumula += elemento.getNome() + "\n";
        }
    }
    return this.getNome() + "\n" + acumula;
}

}

// Classe ARQUIVO ----------------------------------------------------------------------------- class Arquivo extends Elemento{ int tamanho;

public Arquivo (String nome, int tam) {
    super(nome);
    this.tamanho = tam;
}

@Override
public String getNome(){
    return super.getNome();
}

@Override
public int getTamanho() {
    return tamanho;
}

}

// Classe AD2 ----------------------------------------------------------------------------- public class AD2_ { public static void main(String[] args) {

    Pasta p1 = new Pasta("dir1");
    p1.adiciona(new Arquivo("arquivo1.txt", 150));
    p1.adiciona(new Arquivo("arquivo2.txt", 200));

    Pasta p2 = new Pasta("dir2");
    p2.adiciona(new Arquivo("arquivo3.txt", 500));
    Pasta p3 = new Pasta("dir3");
    p3.adiciona(new Arquivo("arquivo4.txt", 350));
    p3.adiciona(p2);
    Pasta raiz = new Pasta("c:/");
    raiz.adiciona(p1);
    raiz.adiciona(p3);
    raiz.remover("dir2/arquivo3.txt");
    System.out.println(raiz.getTamanho());
    System.out.println(raiz);

}

}

2 respostas
solução!

Oi amigo, consegue subir esse projeto no github para eu dar uma olhada? Pegando o código que você mandou não deu certo juntar por partes.

OI Otávio. Cara muito obrigado por responder. Eu já resolvi! Mas vou sim subir para o Git. Assim que eu subir te falo por aqui para olhar a solução. Novamente obrigado!