Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

chat socket Multithread

Boa noite ,

Fiz um sistema de chat socket Multithread . Esta funcionando nomal e salvando o arquivo txt. Gostaria de saber como faço pro arquivo txt salvar por data de data. Por exemplo , msg(data).txt

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package nfsbcliente;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

/**
 *
 * @author nicolle 
 */
public class NFSBcliente extends Thread{

    //Flag que indica quando se deve terminar a execução.
    public  static boolean done = false;
    public static void main(String[] args) {
        try{
            //Cria um socket, com o ip do servidor e porta
            Socket conexao = new Socket("127.0.0.1", 2222);
            //Socket conexao = new Socket("172.16.49.5", 1234);

            //apos conextar, deve pegar os objetos que controlam o fluxo de comunicação
            PrintStream saida = new PrintStream(conexao.getOutputStream());
            //enviar o nome do usuário
            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Entre com o seu apelido: ");
            String meuNome = teclado.readLine();
            saida.println(meuNome);

            //iniciar a tread de recepção de mensagens
            Thread t = new NFSBcliente (conexao);
            t.start();

            //captura o que foi digitado e envia pro servidor
            String linha;
            while(true){
                //captura o que foi digitado
                System.out.println("> ");
                linha = teclado.readLine();
                //antes de enviar, verifica se a conexao n foi fechada
                if(done){
                    break;
                }
                saida.println(linha);
            }
        }catch(IOException e){
            //caso ocorra exceção de I/O
            System.out.println("Exception do main");
            System.out.println("IOException: " + e);
        }
    }
    //recepção de mensagens do cliente
    private Socket conexao;
    //construtor que recebe o socket deste cliente
    public NFSBcliente(Socket s){
        conexao = s;
    }

    //execução da thread
    public void run(){
        try{
            BufferedReader entrada = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
            String linha;
            while(true){
                //pega o que o servidor enviou
                linha = entrada.readLine();

                //verifica se a linha e valida
                if(linha == null){
                    System.out.println("Conexão encerrada!");
                    break;
                }
                //caso a linha seja valida, imprimi-la
                System.out.println();
                System.out.println(linha);
                System.out.println("...> ");
            }
        }catch(IOException e){
            //caso ocorra alguma exceção
            System.out.println("Exception do run");
            System.out.println("IOException> " + e);
        }
        //sinaliza para o main que a conexão encerrou
        done = true;
    }
}
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package nfsbserv;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Enumeration;
import java.util.Vector;

/**
 *
 * @author vvalt
 */
public class NFSBserv extends Thread {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        clientes = new Vector();
        try {
            //criando o socket que escutara na porta 2222
            ServerSocket s = new ServerSocket(2222);

            //loop principal
            while (true) {
                //fica aguardando ate alguem se conectar no servidor
                System.out.println("Esperando alguem se conectar...");
                Socket conexao = s.accept();
                System.out.println("Connectou!");

                //cria um thread para receber essa conexão
                Thread t = new NFSBserv (conexao);
                t.start();
                //volta no loop esperando mais alguem se conectar
            }

        } catch (IOException e) {
            //caso ocorro algum problema de I/O
            System.out.println("IOException: " + e);
        }
    }

    //parte que controla a conexão por meio de threads
    private static Vector clientes;
    //socket do cliente
    private Socket conexao;
    //nome do cliente
    private String meuNome;

    //contrutor que recebe o socket deste cliente
    public NFSBserv(Socket s) {
        conexao = s;
    }

    //execução da thread
    public void run() {
        try {
            //objetos que permitem controlar flixo de comunicação
            BufferedReader entrada = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
            PrintStream saida = new PrintStream(conexao.getOutputStream());

            //primeiramente, espera-se pelo nome do cliente
            meuNome = entrada.readLine();
            //agora verifica se a string e valida
            if (meuNome == null) {
                return;
            }
            //Quando o usuario e valido, adiciona ele ao vetor de clientes
            clientes.add(saida);
            //não a importancia de o cliente ser compartilhado entre varias threads

            //loop principal que espera as strings do cliente
            //ele e quebrado quando o cliente envia linha em branco(interrompida)
            String linha = entrada.readLine();
            while (linha != null && !(linha.trim().equals(""))) {
                //reenvia a linha para todos os clientes conectados
                sendToAll(saida, " disse: ", linha);

                //espera por uma nova linha
                linha = entrada.readLine();
            }
            //quando o usuário envia linha em branco, fecha sua conexão
            sendToAll(saida, " saiu ", "do chat!");
            clientes.remove(saida);
            conexao.close();
        } catch (IOException e) {
            //caso ocorra alguma exeção de I/O
            System.out.println("IOException: " + e);
        }
    }

    //enviar uma mensagem para todos, menos para o próprio
    public void sendToAll(PrintStream saida, String acao, String linha) throws IOException {
        //define o caminho do arquivo que sera utilizado para leitura ou escrita
        File f = new File("C:\\Users\\nicolle\\msg.txt");

        //Cria uma instancia do arquivo para escrita
        FileWriter fw = new FileWriter(f, true);    //true pra não substituir tudo

        //Cria a possibilidade de escrever no arquivo
        PrintWriter pw = new PrintWriter(fw);

        Enumeration e = clientes.elements();
        while (e.hasMoreElements()) {
            //obtém o fluxo dde saida de um dos clientes
            PrintStream chat = (PrintStream) e.nextElement();
            //envia para todos, menos para o próprio usuário
            if (chat != saida) {
                //realmente escreve no arquivo
                pw.println(meuNome + acao + linha);

                //fecha a conexão do arquivo
                fw.close();
                chat.println(meuNome + acao + linha);
            }
        }
    }
}
1 resposta
solução!

Olá Nicolle, tudo bem?

Você pode formatar uma data e concatenar ao nome do arquivo antes de salvar.

LocalDate dataAtual LocalDate.now();

String dataFormatada = dataAtual.format(DateTimeFormatter.ofPattern("dd-MM-yyyy"))

File f = new File("C:\\Users\\nicolle\\msg" + dataFormatada+ ".txt");

Espero ter ajudado.

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