2
respostas

Dependencias com o Maven

Boa tarde pessoal, estou iniciando no aprendizado do Maven e no desenvolvimento da segunda aula, estou com duvida no código abaixo:

public class Main { public static void main(String[] args) throws FileNotFoundException { List produtos = new CsvToBeanBuilder(new FileReader("c:/cursos/java/desenvolvimento/maven/produtos/src/main/resources/product.csv")) .withType(Produto.class).build().parse();

    for (Produto produto: produtos) {
        System.out.println(produto);
    }

}

}

_______________________________________________________________________________________________

Resposta executar o código completo da 2ª aula:

Exception in thread "main" java.io.FileNotFoundException: c:\cursos\java\desenvolvimento\maven\produtos\src\main\resources\product.csv (O sistema não pode encontrar o arquivo especificado) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:213) at java.base/java.io.FileInputStream.(FileInputStream.java:152) at java.base/java.io.FileInputStream.(FileInputStream.java:106) at java.base/java.io.FileReader.(FileReader.java:60) at Virtual7.Main.main(Main.java:12)

Process finished with exit code 1

Dúvida: A forma que eu estou digitando o caminho do arquivo esta errado?
2 respostas

Sim, o erro indica que o sistema não consegue encontrar o arquivo product.csv no caminho especificado. Aqui estão algumas possíveis causas e soluções:

  • Acesse a pasta c:\cursos\java\desenvolvimento\maven\produtos\src\main\resources\ e veja se o arquivo product.csv está lá.
  • Se não estiver, crie ou mova o arquivo para esse local.

O caminho que você passou está absoluto, mas o ideal em projetos Maven é usar caminhos relativos, pois os arquivos dentro de src/main/resources/ ficam disponíveis no classpath da aplicação.

ao invés de usar um caminho absoluto, carrega o arquivo usando o getResourceAsStream():

import com.opencsv.bean.CsvToBeanBuilder;
import java.io.InputStreamReader;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        try {
            InputStreamReader reader = new InputStreamReader(
                Main.class.getClassLoader().getResourceAsStream("product.csv")
            );

            List<Produto> produtos = new CsvToBeanBuilder<Produto>(reader)
                .withType(Produto.class)
                .build()
                .parse();

            for (Produto produto : produtos) {
                System.out.println(produto);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • getClassLoader().getResourceAsStream("product.csv") carrega arquivos do classpath.

  • O arquivo product.csv deve estar dentro de src/main/resources/ para ser encontrado.

  • O melhor método é carregar o arquivo do classpath (resources/).

  • Se precisar de um caminho fixo, use C:\\caminho\\do\\arquivo.csv para evitar erros.

Testa aí e me avisa se precisar de mais ajuda!

Obrigado pela ajuda.