1
resposta

Cadastro Empresa + java.io

Bom dia,

Estava fazendo o curso e resolvi alterar o código para no lugar de perder os dados cada vez q o servidor é reiniciado, ele salva um arquivo txt, lê o arquivo, coloca os dados em uma ArrayList e exibe, quando o cadastro de uma nova empresa é feito o sistema salva em cima do txt com o conteúdo da arraylist e o novo dado, mas logo no inicio quando tento acessar o arquivo txt recebo uma excepcion " for servlet [br.com.alura.danilo.servlet.NovaEmpresaServlet] in context with path [/gerenciador2] threw exception java.io.FileNotFoundException: banco.txt (O sistema não pode encontrar o arquivo especificado)" mas o arquivo está na pasta raiz do projeto, igual do curso de java.io...

package br.com.alura.danilo.servlet;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Reader;
import java.util.Scanner;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/cadastroEmpresa")
public class NovaEmpresaServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        InputStream fis = new FileInputStream("banco.txt");    

        System.out.println("Cadastrando nova empresa");

        String nomeEmpresa = request.getParameter("nome");
        Empresa empresa = new Empresa();
        empresa.setNome(nomeEmpresa);
        Banco banco = new Banco();

            banco.adiciona(empresa);
        System.out.println(empresa);




        PrintWriter out = response.getWriter();        
        out.println("<html><body>Empresa "+ nomeEmpresa  + ", cadastrada com sucesso!</body></html>");


    }

}
1 resposta

Fala Danilo tudo certo?

O que acontece agora é que temos agora a aplicação rodando no servidor. Primeiramente faça o seguinte: Vá na aba servers e remova o gerenciador, dê dois cliques em cima do Tomcat. Procure a aba Server Locations e marque a opção Use Tomcat instalation. Isso fará com que o Tomcat gerencie os arquivos.

Agora crie a pasta resources dentro de WebContent. Resources é a pasta onde ficam imagens, css etc. e webcontent é digamos a pasta raiz agora. Na verdade o realpath fica agora dentro da pasta do tomcat. Procure por wtpwebapps na pasta do tomcat. Tudo que vc adicionar pelo eclipse na pasta WebContent vai prá lá agora.

Faça isso agora para leitura:

String realPath = request.getServletContext().getRealPath("/resources/");
        InputStream fis = new FileInputStream(realPath + "empresas.txt");
        Reader isr = new InputStreamReader(fis, "utf-8");
        BufferedReader br = new BufferedReader(isr);
        String linha = br.readLine();
        while(linha != null) {
            System.out.println(linha);
            linha = br.readLine();
        }
br.close();

Crie o seu txt em branco na pasta resources. Agora estamos especifio=cando o path do arquivo. O path pode ser o local que vc quiser, mas nesse caso apenas estamos especificando um path gerenciado pelo tomcat. Sem especificar o eclipse estava salvando dentro da pasta do eclipse na pasta do usuário, no meu caso aqui do Windows.

E para escrita:

String realPath = request.getServletContext().getRealPath("/resources/");
        PrintWriter pw = new PrintWriter(new FileWriter(realPath + "empresas.txt", true));
        pw.println(empresa.toString());
        pw.close();

Passando para o FileWriter um parâmetro true para ele fazer um append para não sobrescrever. E nunca esqueça de usar o close.

Um abraço

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software