• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

M+R

Como escrever num txt sem usar FileWriter ou java.io... (urgente)

20 mensagens neste tópico

Olá, tenho que criar um programa onde não posso fazer "imports" no java sem ser o import java.util.Scanner e não sei como escrever num ficheiro .txt, alguem da sugestões?

espero k alguem responda rapido, visto que tenho k entregar o trabalho amanhã        :dontgetit:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom tanto quanto sei isso é impossível o Scanner apenas permite a leitura não a escrita.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não era propriamente para usar o scanner, simplesmente uma forma em que n fizexe outros imports    ... mas acho que vou usar o FileWriter... k se lixe, quero é acabar esta coisa... lol      :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Simplesmente não tens outra hipótese sem o package IO não consegues escrever em ficheiros.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não podes fazer imports?  E isso é um requisito porque?

Podes sempre usar o nome completo da classe, sem fazer import :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom, tentei fazer o que queria usando um FileWriter, mas apesar de não existir qualquer erro no código, o codigo que ponho aqui em baixo simplesmente não escreve nada! Ler consigo, a usar um Scanner e a classe File... e o ficheiro CHAT.txt existe..... não era suposto quando este código corre-se ele fazer o que pretendo?... ou pelo menos escrever qualquer coisinha?...

try{FileWriter ficheiro = new FileWriter("CHAT.txt");

          ficheiro.write("INFO " +lista.acumcontactos+ " " +lista.contactos+ "\n");

                for(int i=0; i<lista.contactos; i++){

                    temp += ("CONTACTO " +lista.nick+ " " +lista.sexo+ " "

                      +lista.idade+ " " +lista.email+ " "

                      +lista.nomecompleto+ " " +"\n");

                    temp += ("CONTACTOINFO " +lista.estado+ " " +lista.grupo+ " "

                    +lista.bloqueado+ "\n");

                    for(int j=0; j<lista.mensagem.enviadas; j++){

                    temp += ("ENVIADA " +lista.mensagem.msgenviada[j]+ "\n");

                    }

                    for(int j=0; j<lista.mensagem.recebidas; j++){

                    temp += ("RECEBIDA " +lista.mensagem.msgrecebida[j]+ "\n");

                    }

                }

            ficheiro.write(temp);

            }

            catch (IOException e) {

                System.out.println("Erro de escrita no ficheiro");

            }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Faltam dois método importantissímos, flush e close.

Para que os dados "escritos" para um ficheiro possam realmente ser escritos tens de invocar o método flush. Todo o ficheiro aberto tem de ser fechado para deixar de consumir recursos, um ficheiro é algo que existe em memória, nada o obriga a ser escrito para o disco.

Terias de mudar o código para algo parecido com:

try { 
    FileWriter ficheiro = new FileWriter("CHAT.txt");
    ficheiro.write("INFO " +lista.acumcontactos+ " " +lista.contactos+ "\n");

    for(int i = 0; i < lista.contactos; i++) {
        temp += ("CONTACTO " +lista.nick+ " " +lista.sexo+ " "
            +lista.idade+ " " +lista.email+ " "
            +lista.nomecompleto+ " " +"\n");
        temp += ("CONTACTOINFO " +lista.estado+ " " +lista.grupo+ " "
            +lista.bloqueado+ "\n");
        
        for(int j = 0; j < lista.mensagem.enviadas; j++) {
            temp += ("ENVIADA " +lista.mensagem.msgenviada[j]+ "\n");
        }
        
        for(int j = 0; j < lista.mensagem.recebidas; j++) {
            temp += ("RECEBIDA " +lista.mensagem.msgrecebida[j]+ "\n");
        }
    }
    ficheiro.write(temp);
    //!
    ficheiro.flush();
} catch (IOException e) {
    System.out.println("Erro de escrita no ficheiro");
} finally {
    if(ficheiro != null) {
       try {
            ficheiro.close();
       } catch (IOException e) {
           //ignore
       }
}

Já agora, suponho que temp seja uma String, assim sendo e tendo em conta que as Strings em Java são imutáveis, temp += "qualquer coisa" não está a adicionar texto ao fim da String, está a criar uma nova String cujo valor é a concatenação das duas Strings. Se queres fazer esse tipo de código usa um StringBuffer.

Outra nota, estás a colocar "\n" no fim do texto no entanto devias estar a usar o caracter de mudança de linha da plataforma, não devias estar a usar o "\n" já que esse caracter não é o mesmo para todos os sistemas operativos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Outra nota, estás a colocar "\n" no fim do texto no entanto devias estar a usar o caracter de mudança de linha da plataforma, não devias estar a usar o "\n" já que esse caracter não é o mesmo para todos os sistemas operativos.

O Java não trata de escrever os códigos certos dependendo do SO?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O Java não trata de escrever os códigos certos dependendo do SO?

Nop mas em recursos para que possas fazer isso dinamicamente o mesmo acontece com as barras do path de ficheiros. Podes usar o System.getPropertie para isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O Java não trata de escrever os códigos certos dependendo do SO?

Trata. Pelo menos consigo usar sem problemas no mac (onde o caracter de mudança de linha não é o \n).

EDIT: Afinal parece que isso não acontece (a classe BufferedWriter disponibiliza o método newLine para resolver o problema).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O Java não trata de escrever os códigos certos dependendo do SO?

Se estás explicitamente a dizer que queres um "\n" é isso que obtens :(

Mas como o magician disse há formas de dar a volta a isso, além das propriedades do sistema quase todas as classes que actuam numa das áreas que tenham problemas possuem métodos de conveniencia para ajudar, é o caso das streams com métodos para colocar uma nova linha ou escrever uma linha, ou o caso da classe File que possui método para indicar qual o separador usado no caminho dos ficheiros, etc.

Correcto é usar sempre esses mecanismos e nunca colocar nada hardcoded.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mais uma vez peço a vossa ajuda aqui para um grande noob :)...

O programa parece não funcionar quando está a ler o ficheiro txt... alguem de uma olhadela no codigo e diga o que esta mal... ah, e a escrever, a parte onde tem o "finally" tambem da um erro... espero que alguem responda... pk arrisco-me a ter um grande zero...  :dontgetit:

(Projecto do programa, feito no eclipse) -> http://www.megaupload.com/?d=YKCLS0D5

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e que tal definires so uma vez a variavel ficheiro no inicio da tua main ...

boas programacoes

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

...porque se não da erro, diz k akilo precisa de estar entre um "try" e um "catch"...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

troca o "CHAT.TXT" para "../CHAT.TXT"

Não corri o programa, não usas-te utf8 e isto ficou tudo desfigurado no linux.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

quando fui correr o codigo obtive um null pointer exception por causa deste codigo que retorna null, e ele num if pede o metodo equals a uma variavel que retorna null ... ou seja estoira ...

public String idparanick(int id) {
	if(id < contactos){return nick[id];}
	else return null;
}

isto e quando ele procura pelo user que tem id=0 ou seja o M+R ...

ve la o codigo e arranja isto ... e so qdo no outro if veres se ele retorna null ou n ...

boas programacoes

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom, já resolvi o problema do nullPointerException... pelo menos acho que sim, pois o meu prof d IP diz k continua a dar o mesmo erro, so n sei como e k num pc da erro e no outro nao... :rant_01:

http://www.megaupload.com/?d=L644CJ90

Está aqui o projecto, se alguém se der ao trabalho de dar uma olhadela agradecia bastante.

(O outro ficheiro apaguei-o)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

continua a dar null pois o teu array de nicks tem todas as posicoes a null.

boas programacoes

ps. ja agora onde e que te da problemas ? ja que parece que eu embirrei com aquela funcao ...

olha experimenta algo assim ....

public int pesquisaid(String nickaprocurar) {
		int i=0;
		nickexistente = false;
		String nick;
		while(!nickexistente && i < contactos){
			if((nick=idparanick(i))!=null && nick.equals(nickaprocurar)){
				nickexistente = true;}
			else i++;
		}
		if(nickexistente) return i;
		else return -1;
}

fiz as minimas alteracoes ao teu codigo ... se vires bem aqui nao necessitas de nenhuns truques como o que andaste a fazer na funcao idparanick ....

boas programacoes

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

na main experimenta a colocar if else em vez de so ifs ... pelo menos nao andas a fazer mais comparacoes

boas programacoes

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigadão pela ajuda... um 0 já não tenho...  :biggrin:

Mas tenho é que treinar/estudar programação bastante mais  :)...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora