Ir ao conteúdo
  • Cadastre-se

Java Ler um arquivo txt e adicionar a uma lista duplamente encadeada em java


Visitante
Ir à solução Resolvido por JorgeGus,

Posts recomendados

Sou bem iniciante em programação e estou codificando esse programa para um trabalho de faculdade.

É um "filmoteca", preciso ler os dados de um arquivo txt com os seguintes campos (titulo, estilo, ator, produtora, sinopse, caminho) e inserir em uma lista duplamente encadeada com a chave por Titulo, já montei a lista encadeada.

O formato do arquivo é txt, os dados é separado por ponto-e-vírgulas. Os dados são gravados dessa forma no arquivo

titulo;sinopse;produtora;atorPrincipal;estilo;caminhoDoArquivoDaCapa

 

Não sei como fazer a leitura do arquivo pra inserir na lista. Alguém pode me ajudar, por favor?

public class Filme {
    
    private String titulo;
    private String sinopse;
    private String produtora;
    private String atorPrincipal;
    private String estilo;
    private String caminhoDoArquivoDaCapa;

    private Filme antTitulo;
    private Filme antAtor;
    private Filme antEstilo;
    private Filme proxTitulo;
    private Filme proxAtor;
    private Filme proxEstilo;
    
    protected final String SEPARADOR = ";";

    public Filme (String titulo, String sinopse, String produtora, String atorPrincipal, String estilo,
            String caminhoDoArquivoDaCapa) {

        this.titulo = titulo;
        this.sinopse = sinopse;
        this.produtora = produtora;
        this.atorPrincipal = atorPrincipal;
        this.estilo = estilo;
        this.caminhoDoArquivoDaCapa = caminhoDoArquivoDaCapa;

        this.antTitulo = null;
        this.antAtor = null;
        this.antEstilo = null;
        this.proxTitulo = null;
        this.proxAtor = null;
        this.proxEstilo = null;
    }
    
    public Filme() {
        // TODO Auto-generated constructor stub
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getSinopse() {
        return sinopse;
    }

    public void setSinopse(String sinopse) {
        this.sinopse = sinopse;
    }

    public String getProdutora() {
        return produtora;
    }

    public void setProdutora(String produtora) {
        this.produtora = produtora;
    }

    public String getAtorPrincipal() {
        return atorPrincipal;
    }

    public void setAtorPrincipal(String atorPrincipal) {
        this.atorPrincipal = atorPrincipal;
    }

    public String getEstilo() {
        return estilo;
    }

    public void setEstilo(String estilo) {
        this.estilo = estilo;
    }

    public String getCaminhoDoArquivoDaCapa() {
        return caminhoDoArquivoDaCapa;
    }

    public void setCaminhoDoArquivoDaCapa(String caminhoDoArquivoDaCapa) {
        this.caminhoDoArquivoDaCapa = caminhoDoArquivoDaCapa;
    }

    public Filme getAntTitulo() {
        return antTitulo;
    }

    public void setAntTitulo(Filme antTitulo) {
        this.antTitulo = antTitulo;
    }

    public Filme getAntAtor() {
        return antAtor;
    }

    public void setAntAtor(Filme antAtor) {
        this.antAtor = antAtor;
    }

    public Filme getAntEstilo() {
        return antEstilo;
    }

    public void setAntEstilo(Filme antEstilo) {
        this.antEstilo = antEstilo;
    }

    public Filme getProxTitulo() {
        return proxTitulo;
    }

    public void setProxTitulo(Filme proxTitulo) {
        this.proxTitulo = proxTitulo;
    }

    public Filme getProxAtor() {
        return proxAtor;
    }

    public void setProxAtor(Filme proxAtor) {
        this.proxAtor = proxAtor;
    }

    public Filme getProxEstilo() {
        return proxEstilo;
    }

    public void setProxEstilo(Filme proxEstilo) {
        this.proxEstilo = proxEstilo;
    }
}
public class Filmoteca {

    private Filme primeiroTitulo;
    private Filme primeiroAtor;
    private Filme primeiroEstilo;
    private Filme ultimoTitulo;
    private Filme ultimoAtor;
    private Filme ultimoEstilo;
    private Filme atual;

    public Filmoteca() {
        this.primeiroTitulo = null;
        this.primeiroAtor = null;
        this.primeiroEstilo = null;
        this.ultimoTitulo = null;
        this.ultimoAtor = null;
        this.ultimoEstilo = null;
        this.atual = null;
    }

    public Boolean estaVazio() {
        return (this.primeiroTitulo == null);

    }

    public void insereOrdenadoPorTitulo(Filme filme) {

        Filme aux, anterior;

        if (this.estaVazio()) {
            this.primeiroTitulo = this.ultimoTitulo = filme;
            return;
        }

        if (filme.getTitulo().compareTo(this.primeiroTitulo.getTitulo()) < 0) {
            filme.setProxTitulo(this.primeiroTitulo);
            this.primeiroTitulo.setAntTitulo(filme);
            this.primeiroTitulo = filme;
            return;
        }

        anterior = this.primeiroTitulo;
        for (aux = this.primeiroTitulo.getProxTitulo(); aux != null
                && filme.getTitulo().compareTo(aux.getTitulo()) > 0; aux = aux.getProxTitulo()) {
            anterior = aux;
        }

        anterior.setProxTitulo(filme);
        filme.setAntTitulo(anterior);
        filme.setProxTitulo(aux);

        if (filme.getProxTitulo() == null) {
            this.ultimoTitulo = filme;
        } else {
            aux.setAntTitulo(filme);
        }
    }

}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@defera172

Scanner arq = new Scanner(new FileReader("Arquivo.txt"));
String linha;
String[] tokens;

while (arq.hasNext()) {
	linha = arq.next();
	tokens = linha.split(";");

	titulo = tokens[0];
	sinopse = tokens[1];
	produtora = tokens[2];
	atorPrincipal = tokens[3];
	estilo = tokens[4];
	caminhoDoArquivoDaCapa = tokens[5];
}
arq.close();

Supondo que as informações de cada filme estejam em uma linha separada e as informações estejam separadas por ";", esse código deve funcionar.

 

Se a ideia é carregar todos os filmes de uma vez, basta chamar o construtor dentro do while passando os parâmetros, mas não testei o seu programa então não sei se isso vai bastar para ele funcionar.

 

E você também poderia passar o conteúdo do array diretamente para o construtor, sem atribuir às variáveis antes, ex:

new Filme(tokens[0], tokens[1], tokens[2], tokens[3], tokens[4], tokens[5]);

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Curso de Redes MikroTik

LANÇAMENTO!

CLIQUE AQUI PARA SE INSCREVER!

* Este curso não é ministrado pela equipe do Clube do Hardware.