Ir ao conteúdo

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


Ir à solução Resolvido por JorgeGus,

Posts recomendados

Postado

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);
        }
    }

}

 

  • Solução
Postado

@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]);

 

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...