Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

FileInputStream try-with-resources

Boa tarde a todos!

Eu estava seguindo a aula que ensinava escrever para um arquivo através da classe "FileOutputStream", nesta aula o professor utiliza throws no método main para lidar com a exceção checked, porém eu resolvi utilizar try-with-resources, eu fiz conforme foi ensinado porém eu testava e nada era escrito para meu arquivo, após alguns testes eu percebi que faltava a linha que fechava o BufferedWriter.

        try(OutputStream fos = new FileOutputStream("loremNew.txt")){

            Writer osw = new OutputStreamWriter(fos);

            BufferedWriter bw = new BufferedWriter(osw);

            bw.write("Ola mundo!");
            bw.newLine();
            bw.write("Mais uma linha top!");
            bw.close(); // <- Faltava essa linha

        } catch (IOException ex){
            System.out.println(ex.getMessage());
        }

Após eu adicionar essa linha, começou a escrever para o arquivo, minha dúvida é a seguinte, quando usamos try-with-resources não era para ser chamado automaticamente o método close() dos objetos que implementam a interface Closeable?

Por exemplo o FileOutputStream -> OutputStream (Que implementa Closeable).

2 respostas
solução!

Olá Eduardo, tudo bem com você?

O try-with-resources só fecha os recursos que foram passados dentro dos parênteses. Então, nesse caso, ele só está fechando o FileOutputStream.

Para que possamos fechar vários recursos, precisamos declarar o recursos dentro dos parênteses, separados por ponto e vírgula.

private void orderOfClosingResources() throws Exception {

    try (AutoCloseableResourcesFirst af = new AutoCloseableResourcesFirst();
        AutoCloseableResourcesSecond as = new AutoCloseableResourcesSecond()) {

        af.doSomething();
        as.doSomething();
    }
}

A partir do Java 9, podemos deixar o código mais limpo ao declararmos os recursos fora do bloco try-with-resources, passando apenas as variáveis dentro dos parênteses!

final Scanner scanner = new Scanner(new File("testRead.txt"));
PrintWriter writer = new PrintWriter(new File("testWrite.txt"))

try (scanner;writer) { 
    // omitted
}

fonte: https://www.baeldung.com/java-try-with-resources

Espero que isso ajude! Se ficou alguma dúvida é só avisar!!

Forte abraço e bons estudos!!

Boa tarde Thiago!

Ah legal, entendi agora. Muito obrigado pela ajuda!