Read a txt file and add to a double-chained java list

Asked

Viewed 71 times

-1

I’m very beginner in programming and I’m coding this program for a college job.

I need to read the data of a txt file with the following fields (title, style, actor, producer, synopsis, path) and insert in a list double-chained with the key by Titulo, I’ve assembled the list

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

}

I don’t know how to read the file to insert in the list. Can someone help me, please?

  • What is the file format? Separated by commas or semicolons? Does it have a header? Where is the class declaration Filme?

  • The file format is txt, it is separated by semicolons

  • I updated the question and put the Film class statement

  • the data is saved in this way in the title file;synopsis;producer;atorPrincipal;style

  • Thanks for the information, I published an answer. See if it solves your problem!

  • vlw man, helped a lot, Thank you!

Show 1 more comment

1 answer

1

First, let’s simulate a file, called txt file.. Your content will be as follows:

T0;S0;P0;A0;E0;/P0
T1;S1;P1;A1;E1;/P1
T2;S2;P2;A2;E2;/P2
T3;S3;P3;A3;E3;/P3
T4;S4;P4;A4;E4;/P4
T5;S5;P5;A5;E5;/P5

You can read the file as follows:

try (final BufferedReader reader = new BufferedReader(new FileReader("arquivo.txt"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        // Faça algo com a linha lida aqui
        System.out.println(line);
    }

} catch (IOException e) {}

With the line read, you can divide it by charactere ; and create an object Filme with the fields created:

try (final BufferedReader reader = new BufferedReader(new FileReader("arquivo.txt"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        final String[] campos = line.split(Filme.SEPARADOR);
        final Filme filme = new Filme(campos[0], campos[1], campos[2], campos[3], campos[4], campos[5]);
    }

} catch (IOException e) {}

Finally, create an empty chained list before reading the file and, as you read, update the list:

final Filmoteca filmoteca = new Filmoteca();

try (final BufferedReader reader = new BufferedReader(new FileReader("arquivo.txt"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        final String[] campos = line.split(Filme.SEPARADOR);
        final Filme filme = new Filme(campos[0], campos[1], campos[2], campos[3], campos[4], campos[5]);
        filmoteca.insereOrdenadoPorTitulo(filme);
    }

} catch (IOException e) {}

The necessary imports at the top of the archive will be:

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

Browser other questions tagged

You are not signed in. Login or sign up in order to post.