[RESOLVIDO] Por que não consigo instanciar FileWriter?

Olá, estou criando um código utilizando a classe FileWriter pra escrever alguns arquivos para mim, só pra fins de teste mesmo, mas não estou conseguindo instanciar a classe FileWriter “fw” em uma classe minha que não tenha um método main, que está em outra classe no package

O erro gerado é o seguinte:
“Default constructor cannot handle exception type IOException thrown by implicit super constructor. Must define an explicit constructor”

O que posso fazer?

import java.io.*;

public class SistemaEscrita {

String path = "C:\\Users\\victo\\Desktop\\arquivoGerado.txt";
File arquivo = new File(path);
FileWriter fw = new FileWriter(arquivo);

}

Seu código está exatamente assim? À priori, todo “algoritmo” deveria estar dentro de um método ou de um construtor. Teu problema é que o compilador vai fornecer um construtor padrão e “enfiar” esse seu código dentro dele, maaaasssss o construtor de FileWriter pode lançar uma exceção verificada (IOException), então você precisa fornecer, explicitamente, o construtor para sua classe SistemaEscrita e tratar a exceção ou lançá-la para quem for construir um objeto dela.

Seguindo o que você fez, uma solução seria:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class SistemaEscrita {

    String path = "C:\\Users\\victo\\Desktop\\arquivoGerado.txt";
    File arquivo = new File( path );
    FileWriter fw;
    
    public SistemaEscrita() {
        try {
            fw = new FileWriter( arquivo );
        } catch ( IOException exc ) {
            // trata a exceção aqui...
        }
    }

}

Uma forma menos feia, mais padronizada, seria assim:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class SistemaEscrita {

    private String path;
    private File arquivo;
    private FileWriter fw;
    
    public SistemaEscrita() {
        
        path = "C:\\Users\\victo\\Desktop\\arquivoGerado.txt";
        arquivo = new File( path );
        
        try {
            fw = new FileWriter( arquivo );
        } catch ( IOException exc ) {
            // trata a exceção aqui...
        }
        
    }

}

Em tempo, se quiser lançar para quem construir SistemaEscrita tratar, seria algo assim:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class SistemaEscrita {

    private String path;
    private File arquivo;
    private FileWriter fw;
    
    public SistemaEscrita() throws IOException {
        
        path = "C:\\Users\\victo\\Desktop\\arquivoGerado.txt";
        arquivo = new File( path );
        fw = new FileWriter( arquivo );
        
    }

}

E na classe cliente:

import java.io.IOException;

public class ClasseCliente {

    public static void main( String[] args ) {
        
        try {
            SistemaEscrita se = new SistemaEscrita();
            //...
        } catch ( IOException exc ) {
            // trata a exceção aqui...
        }
    }

}
1 curtida

Na classe que vou utilizar o FileWriter só tem isso, porque não conseguia instanciar ele de jeito nenhum e procurei ajuda no Fórum para ver qual era o problema

Explicação impecável :clap::clap:

Consegui entender o que estava fazendo de errado e o código agora funcionou corretamente.
Obrigado pela sua ajuda, David! Sua explicação foi perfeita!

Tudo que aprendi sobre Java foi pura curiosidade que resultou em pesquisa, então sou bem leigo ainda :grimacing:

1 curtida

Continue e persevere, o caminho é longo e muitas vezes árduo, mas recompensador! A galera está aqui para ajudar! Abraço!

1 curtida