How do I write data from an Arraylist to a txt file (in addition to reading the file when starting the program)?

Asked

Viewed 523 times

0

Full Project Github Repository

/*a human resources company specialising in market relocations (job vacancies), calls for the creation of a system to computerize its actions. Thus, she wants to register the candidates with her name (String) and age (int). Applicants may be unemployed, who have the time in months (int) who does not work or employees, who has the company name (String), where it is currently. Vacancies have the description (String) and salary offered (double). Vacancies can be internship, that in time in months (int) or contract, that may be temporary or not (Boolean). Create a Java program to register unemployed or employed candidates) and register vacancies (internship or contract). The system should be able to register candidates for vacancies. Create a class to create the HR company (main). In this class there should be a menu to register candidates, register vacancies, register candidate x vacancy, listings by type, show number of candidates and their situation and candidates x vacancy. Author: Matheus Vilela Diniz Maia Main Empresarh */

https://github.com/matigous/RhJob

import java.util.Scanner;
import java.util.ArrayList;

public class EmpresaRH {

    public static void main(String[] args) {
        Scanner readNum = new Scanner(System.in);
        Scanner readStr = new Scanner(System.in);
        String ok = "";
        ArrayList<CandidatoEmpregado> candidatoEmpregado = new ArrayList<CandidatoEmpregado>();
        ArrayList<CandidatoDesempregado> candidatoDesempregado = new ArrayList<CandidatoDesempregado>();
        ArrayList<VagaEstagio> vagaEstagio = new ArrayList<VagaEstagio>();
        ArrayList<VagaContrato> vagaContrato = new ArrayList<VagaContrato>();
        ArrayList<CandidatoEmpregado_VagaEstagio> candidatoEmpregado_vagaEstagio_Obj = new ArrayList<CandidatoEmpregado_VagaEstagio>();
        ArrayList<CandidatoEmpregado_VagaContrato> candidatoEmpregado_vagaContrato_Obj = new ArrayList<CandidatoEmpregado_VagaContrato>();
        ArrayList<CandidatoDesempregado_VagaEstagio> candidatoDesempregado_vagaEstagio_Obj = new ArrayList<CandidatoDesempregado_VagaEstagio>();
        ArrayList<CandidatoDesempregado_VagaContrato> candidatoDesempregado_vagaContrato_Obj = new ArrayList<CandidatoDesempregado_VagaContrato>();

        do {
            System.out.printf(
                    "\nCadastrar Candidato (1) / Cadastrar Vaga (2) / Cadastrar Candidato x Vaga (3) / Listar Vagas p/ Tipo (4) / Qt de Cadidatos e Situacao (5) / Cadidato p/ Vaga (6): ");
            switch (readNum.nextInt()) {
            case 1: /* cadastrar candidatos */
                System.out.printf("\nEmpregado (1) / Desempregado (2): ");
                int estado = readNum.nextInt();
                System.out.printf("Nome Candidato: ");
                String nome = readStr.nextLine();
                System.out.printf("Idade Candidato: ");
                int idade = readNum.nextInt();
                if (estado == 1) {
                    System.out.printf("Empresa Atual: ");
                    String empresaAtual = readStr.nextLine();
                    candidatoEmpregado.add(new CandidatoEmpregado(nome, idade, empresaAtual));
                } else if (estado == 2) {
                    System.out.printf("Tempo desempregado: ");
                    int mesesSemTrabalho = readNum.nextInt();
                    candidatoDesempregado.add(new CandidatoDesempregado(nome, idade, mesesSemTrabalho));
                } else {
                    System.out.println("Escolha Invalida! ");
                    break;
                }
                break;
            case 2: /* cadastrar vagas */
                System.out.printf("\nVaga Estagio (1) / Vaga Contrato (2): ");
                int estado2 = readNum.nextInt();
                System.out.printf("Descricao da Vaga: ");
                String descricao = readStr.nextLine();
                System.out.printf("Salario da Vaga: ");
                double salario = readNum.nextDouble();
                if (estado2 == 1) {
                    System.out.printf("Duracao (meses): ");
                    int tempoMes = readNum.nextInt();
                    vagaEstagio.add(new VagaEstagio(descricao, salario, tempoMes));
                } else if (estado2 == 2) {
                    System.out.printf("Eh temporaria (Sim > (1)) (Nao > (0)): ");
                    boolean ehTemporario = (readNum.nextInt() == 1) ? true : false;
                    vagaContrato.add(new VagaContrato(descricao, salario, ehTemporario));
                } else {
                    System.out.println("Escolha Invalida! ");
                    break;
                }
                break;
            case 3: /* cadastrar candidato x vaga */
                System.out.printf("\nCadastrar Cand. Empregado (1) ou Desempregado (2) p/ a Vaga: ");
                int escolha1 = readNum.nextInt();
                // Empregado
                if (escolha1 == 1) {
                    for (int i = 0; i < candidatoEmpregado.size(); i++) {
                        System.out.printf("(Cadiadato Empregado (" + (i + 1) + ") nome: "
                                + candidatoEmpregado.get(i).getNome() + ") ");
                    }
                    System.out.printf("\nEscolha o n do Candidato: ");
                    int numeroCandidatoEmpregado = readNum.nextInt();
                    System.out.printf("Cadastrar p/ Estagio (1) ou Contrato (2): ");
                    int escolha2 = readNum.nextInt();
                    /* Estagio */
                    if (escolha2 == 1) {
                        for (int i = 0; i < vagaEstagio.size(); i++) {
                            System.out.printf("(Vaga Estagio (" + (i + 1) + ") nome: "
                                    + vagaEstagio.get(i).getDescricao() + ") ");
                        }
                        System.out.printf("\nEscolha o n da Vaga: ");
                        int numeroVagaEstagio = readNum.nextInt();
                        candidatoEmpregado_vagaEstagio_Obj.add(
                                new CandidatoEmpregado_VagaEstagio(candidatoEmpregado.get(numeroCandidatoEmpregado - 1),
                                        vagaEstagio.get(numeroVagaEstagio - 1)));
                    } /* Contrato */ else if (escolha2 == 2) {
                        for (int i = 0; i < vagaContrato.size(); i++) {
                            System.out.printf("(Vaga Contrato (" + (i + 1) + ") nome: "
                                    + vagaContrato.get(i).getDescricao() + ") ");
                        }
                        System.out.printf("\nEscolha o n da Vaga: ");
                        int numeroVagaContrato = readNum.nextInt();
                        candidatoEmpregado_vagaContrato_Obj.add(new CandidatoEmpregado_VagaContrato(
                                candidatoEmpregado.get(numeroCandidatoEmpregado - 1),
                                vagaContrato.get(numeroVagaContrato - 1)));
                    } else {
                        System.out.println("Escolha Invalida! ");
                        break;
                    }
                    // Desempregado
                } else if (escolha1 == 2) {
                    for (int i = 0; i < candidatoDesempregado.size(); i++) {
                        System.out.printf("(Cadiadato Desempregado (" + (i + 1) + ") nome: "
                                + candidatoDesempregado.get(i).getNome() + ") ");
                    }
                    System.out.printf("\nEscolha o n do Candidato: ");
                    int numeroCandidatoDesempregado = readNum.nextInt();
                    System.out.printf("Cadastrar p/ Estagio (1) ou Contrato (2): ");
                    int escolha3 = readNum.nextInt();
                    /* Estagio */
                    if (escolha3 == 1) {
                        for (int i = 0; i < vagaEstagio.size(); i++) {
                            System.out.printf("(Vaga Estagio (" + (i + 1) + ") nome: "
                                    + vagaEstagio.get(i).getDescricao() + ") ");
                        }
                        System.out.printf("\nEscolha o n da Vaga: ");
                        int numeroVagaEstagio = readNum.nextInt();
                        candidatoDesempregado_vagaEstagio_Obj.add(new CandidatoDesempregado_VagaEstagio(
                                candidatoDesempregado.get(numeroCandidatoDesempregado - 1),
                                vagaEstagio.get(numeroVagaEstagio - 1)));
                    } /* Contrato */ else if (escolha3 == 2) {
                        for (int i = 0; i < vagaContrato.size(); i++) {
                            System.out.printf("(Vaga Contrato (" + (i + 1) + ") nome: "
                                    + vagaContrato.get(i).getDescricao() + ") ");
                        }
                        System.out.printf("\nEscolha o n da Vaga: ");
                        int numeroVagaContrato = readNum.nextInt();
                        candidatoDesempregado_vagaContrato_Obj.add(new CandidatoDesempregado_VagaContrato(
                                candidatoDesempregado.get(numeroCandidatoDesempregado - 1),
                                vagaContrato.get(numeroVagaContrato - 1)));
                    } else {
                        System.out.println("Escolha Invalida! ");
                        break;
                    }
                } else {
                    System.out.println("Escolha Invalida! ");
                    break;
                }

                break;
            case 4: /* listar vagas por tipo */
                System.out.print("\nVaga Estagio (1) / Vaga Contrato (2): ");
                int escolha4 = readNum.nextInt();
                if (escolha4 == 1) {
                    for (int i = 0; i < vagaEstagio.size(); i++) {
                        System.out.printf(
                                "(Vaga Estagio (" + (i + 1) + ") nome: " + vagaEstagio.get(i).getDescricao() + ") \n");
                    }
                } else if (escolha4 == 2) {
                    for (int i = 0; i < vagaContrato.size(); i++) {
                        System.out.printf(
                                "(Vaga Contrato (" + (i + 1) + ") nome: " + vagaContrato.get(i).getDescricao() + ") ");
                    }
                } else {
                    System.out.println("Escolha Invalida! ");
                    break;
                }
                break;
            case 5: /* mostrar quantidade de candidatos e sua situação */
                for (int i = 0; i < candidatoEmpregado.size(); i++) {
                    System.out.printf("\n(Cadiadato Empregado " + (i + 1) + " > nome: "
                            + candidatoEmpregado.get(i).getNome() + ") ");
                }
                for (int i = 0; i < candidatoDesempregado.size(); i++) {
                    System.out.printf("\n(Cadiadato Desempregado " + (i + 1) + " > nome: "
                            + candidatoDesempregado.get(i).getNome() + ") ");
                }
                break;
            case 6: /* Candidato por Vaga */
                if (candidatoEmpregado_vagaEstagio_Obj.size() > 0) {
                    for (int i = 0; i < candidatoEmpregado_vagaEstagio_Obj.size(); i++) {
                        System.out.printf("\n"+candidatoEmpregado_vagaEstagio_Obj.get(i));
                    }
                }
                if (candidatoDesempregado_vagaEstagio_Obj.size() > 0) {
                    for (int i = 0; i < candidatoDesempregado_vagaEstagio_Obj.size(); i++) {
                        System.out.printf("\n"+candidatoDesempregado_vagaEstagio_Obj.get(i));
                    }
                }
                if (candidatoEmpregado_vagaContrato_Obj.size() > 0) {
                    for (int i = 0; i < candidatoEmpregado_vagaContrato_Obj.size(); i++) {
                        System.out.printf("\n"+candidatoEmpregado_vagaContrato_Obj.get(i));
                    }
                }
                if (candidatoDesempregado_vagaContrato_Obj.size() > 0) {
                    for (int i = 0; i < candidatoDesempregado_vagaContrato_Obj.size(); i++) {
                        System.out.printf("\n"+candidatoDesempregado_vagaContrato_Obj.get(i));
                    }
                }
                System.out.println();
                break;
            default:
                System.out.println("Error!");
            }
            System.out.println();
            System.out.printf("Continuar (Y/N): ");
            ok = readStr.nextLine();
            System.out.println();
        } while (ok.equalsIgnoreCase("Y"));


    }

}
  • What is the point of writing the data into a file and reading it from a file? If you want to have data persistence the best would be to use a database.

  • I agree that using BD is better, but my teacher wants persistence in a text file.

  • Then you have to define how you will store the information in the file. If each line in the file is an Arraylist input and each element is separated by comma or other separator as desired. Then to read the file and popular Arraylist must use the opposite process.

1 answer

0

Your best option in this scenario is to use the DAO - Data Access Object project pattern. This project pattern allows you to you create an abstraction layer between your application and the data source. This way you can exchange this data source in the future without impacting the other layers of your code. You will need a few classes to implement this behavior. A combination with the Factory standard (allows you to create objects hiding implementation details) will be perfect for your project.

Following is a complete example for the Vacancy class:

The DAO interface will be used to create a hierarchy of classes that will implement the DAO project standard.

//DAO.java
package rhjob.dao;

import java.io.Serializable;
import java.util.List;

public interface DAO<T extends Serializable> {

    void persist(List<T> list);
    List<T> findAll();

}

The Vagadao interface will be the superclass of all DAO implementations to store the vacancies, regardless of the database.

//VagaDAO.java
package rhjob.dao;

import rhjob.Vaga;

public interface VagaDAO extends DAO<Vaga> {}

The Vagadaoimpl class will be the default implementation of the Vagadao interface. It is here that the logic to read/write data to file will happen. In the implementation of this example we will store the data in a text file that is informed in the DAO constructor. The data will be saved as JSON. We will use Google’s Gson library.

//VagaDaoImpl.java
package rhjob.dao.impl;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import rhjob.Vaga;
import rhjob.dao.VagaDAO;

public class VagaDAOImpl implements VagaDAO {

    private final File file;

    public VagaDAOImpl(File file) {
        this.file = file;
    }

    @Override
    public void persist(List<Vaga> list) {
        try {
            storeAsJson(list);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(VagaDAOImpl.class.getName()).log(Level.SEVERE, null, ex);            
        }
    }

    @Override
    public List<Vaga> findAll() {
        try {
            return readAll();
        } catch (IOException ex) {
            Logger.getLogger(VagaDAOImpl.class.getName()).log(Level.SEVERE, null, ex);
            return Collections.emptyList();
        }
    }

    private void storeAsJson(List<Vaga> list) throws FileNotFoundException {
        final String jsonString = new Gson().toJson(list);

        try (PrintWriter out = new PrintWriter(file)) {
            out.println(jsonString);
        }
    }

    private List<Vaga> readAll() throws IOException {
        final String textData = readTextData();
        return new Gson().fromJson(textData, new TypeToken<List<Vaga>>(){}.getType());
    }

    private String readTextData() throws IOException {
        StringBuilder sb = new StringBuilder();

        try (Scanner sc = new Scanner(file)) {
            while (sc.hasNextLine()) {
                sb.append(sc.nextLine()).append("\n");
            }
        }

        return sb.toString();
    }
}

//DAOFactory.java
package rhjob.dao;

import java.io.File;
import rhjob.dao.impl.VagaDAOImpl;

public class DAOFactory {

    private static final File vagasFile;

    static {
        vagasFile = new File("D:\\vagas.json");
    }

    public static VagaDAO createVagaDAO() {
        return new VagaDAOImpl(vagasFile);
    }
}

//Vaga.java
package rhjob;

import java.io.Serializable;
import java.util.Objects;

public class Vaga implements Serializable {

    private String descricao;
    private double salario;

    public Vaga() {
    }

    public Vaga(String descricao, double salario) {
        this.descricao = descricao;
        this.salario = salario;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public double getSalario() {
        return salario;
    }

    public void setSalario(double salario) {
        this.salario = salario;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 17 * hash + Objects.hashCode(this.descricao);
        hash = 17 * hash + (int) (Double.doubleToLongBits(this.salario) ^ (Double.doubleToLongBits(this.salario) >>> 32));
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Vaga other = (Vaga) obj;
        if (Double.doubleToLongBits(this.salario) != Double.doubleToLongBits(other.salario)) {
            return false;
        }
        if (!Objects.equals(this.descricao, other.descricao)) {
            return false;
        }
        return true;
    }   

    @Override
    public String toString() {
        return "Vaga{" + "descricao=" + descricao + ", salario=" + salario + '}';
    }        
}


//Main.java
package rhjob;

import java.util.ArrayList;
import java.util.List;
import rhjob.dao.DAOFactory;
import rhjob.dao.VagaDAO;

public class Main {

    public static void main(String[] args) {

        List<Vaga> vagas = new ArrayList<>();
        vagas.add(new Vaga("VAGA 1", 1000));
        vagas.add(new Vaga("VAGA 2", 6000));
        vagas.add(new Vaga("VAGA 3", 1000));
        vagas.add(new Vaga("VAGA 4", 4000));
        vagas.add(new Vaga("VAGA 5", 1000));
        vagas.add(new Vaga("VAGA 6", 2000));
        vagas.add(new Vaga("VAGA 7", 3500));


        VagaDAO dao = DAOFactory.createVagaDAO();        
        dao.persist(vagas);

        System.out.println(dao.findAll());
    }   
}

Browser other questions tagged

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