Leitura de arquivos em Java: padrões

A leitura de arquivos sempre foi uma tarefa corriqueira na programação, desde pequenos experimentos para simulação de bancos de dados até o uso de arquivos para troca de informações entre diferentes sistemas.

Por muito tempo, em Java, houveram alguns padrões dominantes para a leitura de arquivos, como o uso de BufferedReader, Java NIO ou Apache Commons IO, apresentadas nos exemplos de código 1, 2 e 3, respectivamente. Esses padrões são muito verbosos e demandam muitas linhas de código para a realização uma simples tarefa, que é a leitura de um arquivo.

public class BufferedFileReadExample {

    public static void main(String[] args) throws IOException {

        try {

            File f = new File("home/data/data.txt");

            BufferedReader b = new BufferedReader(new FileReader(f));

            String readLine = "";

            while ((readLine = b.readLine()) != null) {
                //processa a linha do arquivo
            }

            b.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

public class NIOFileReadExample {

    public static void main(String[] args) throws IOException {

        RandomAccessFile file = new RandomAccessFile("home/data/data.txt", "r");

        FileChannel channel = file.getChannel();

        ByteBuffer buffer = ByteBuffer.allocate((int) channel.size());

        channel.read(buffer);

        buffer.flip();

        for (int i = 0; i < channel.size(); i++) {
        	//processa a linha do arquivo
        }

        channel.close();
        file.close();

    }
}

 

public class ApacheCommonsIOFileReadExample {

    public static void main(String[] args) throws IOException {

        try {

            File f = new File("home/data/data.txt");

            List<String> lines = FileUtils.readLines(f, "UTF-8");

            for (String line : lines) {
            	//processa a linha do arquivo
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

No entando, desde o lançamento do Java 8, existe uma outra maneira muito mais fácil e que vem se tornando o novo padrão para a leitura de arquivos. Esse padrão consiste no uso de Streams para a leitura do arquivo e resulta em um código muito mais simples e elegante como mostra o exemplo de código 4.

 

public class Java8StreamsFileReadExample {

	public static void main(String[] args) {

		try (Stream<String> stream = Files.lines(Paths.get("home/data/data.txt"))) {
	        stream.forEach((String line) -> {
	        	//processa a linha do arquivo
	        });
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

1 Reply to “Leitura de arquivos em Java: padrões”

Leave a Reply

Your email address will not be published. Required fields are marked *