Java - How to access a String vector of a Class in another Class?

Asked

Viewed 265 times

0

Hello,

I have a class called File.java, in which I read a txt file and put the phrases contained in this file in an Arraylist, which can be viewed in the code below:

public void leitor() throws IOException {

    BufferedReader buffRead = new BufferedReader(new FileReader("arquivo.txt"));
    String linha = "";

    while (true) {
        if (linha != null) {
            arq_frases.add(linha); //arq_frases é o meu ArrayList

        } else {
            break;
        }
        linha = buffRead.readLine();
    }
    buffRead.close();
}

However, I cannot access these Strings in another class, even using Extends Arquivo or Instilling the File Object into another class. On all attempts, I always access the array as null. Where I am missing?

  • Try the static along with the public.

  • "mesmo usando Extends Arquivo ou Instânciando o Objeto Arquivo em outra classe", by this phrase I have the impression that you have not yet understood the basic mechanisms of Java, which are much more fundamental and important than reading files, I recommend studying them first, with books or lessons so that your knowledge does not remain with important gaps on the fundamentals.

1 answer

0


The implementation below is very faithful to the code you made, but now it’s working, I commented the problems I saw:

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

public class Arquivo {

    private ArrayList<String> arq_frases = new ArrayList<>(); //poderia ser lowerCamelCase: "arqFrases"

    public void leitor() throws IOException { //seria melhor um nome como "ler" já que é o comportamento do objeto, "Leitor" parece o nome de um objeto

        BufferedReader buffRead = new BufferedReader(new FileReader("arquivo.txt")); //"arquivo.txt" poderia ser passado por parâmetro para o método ser mais reutilizável
        String linha = "";    
        while (true) {
            if (linha != null) {
                arq_frases.add(linha); //aqui adiciona-se primeiro a linha vazia, depois as linhas do arquivo
                //dessa forma, o ArrayList fica com uma String vazia no índice 0

            } else {
                break;
            }
            linha = buffRead.readLine();
        }
        buffRead.close();
    }

    public static void main(String[] args) {
        Arquivo arquivo = new Arquivo(); //Como coloquei o ArrayList como variável de instância, precisaremos instanciar a classe Arquivo
        try {
            arquivo.leitor(); //carrega arq_frases com as linhas do arquivo
        } catch (IOException e) {
            System.out.println("Ops! problema ao ler o arquivo!");
            e.printStackTrace();
        }
        for (String linha : arquivo.arq_frases) { //acessando o ArrayList da instância
            System.out.println(linha);
        }
    }
}

Below follows an alternative implementation using the class Files:

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.List;
import java.util.stream.Collectors;

public class Arquivo {

    public static List<String> lerLinhasDeArquivo(String caminhoDoArq) throws IOException {
        return Files.lines(new File(caminhoDoArq).toPath(), StandardCharsets.ISO_8859_1).collect(Collectors.toList());
    }

    public static void main(String[] args) throws IOException {
        lerLinhasDeArquivo("arquivo.txt").forEach(System.out::println);
    }
}

In this example, lerLinhasDeArquivo(...) is static, and therefore it is not necessary to instantiate Arquivo to access it.

Browser other questions tagged

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