[resolvido]Gravação de linha por linha em arquivo txt

18 respostas
G
Bom dia, Gostaria da ajuda de todos vocês com o seguinte problema, preciso ler um arquivo de varias linhas, ate ai tudo bem, mas preciso gravar linha por linha depois de fazer mudanças, e necessita ser no mesmo arquivo ai segue o codigo
File file = new File("c:\Arquivo.txt");
            BufferedReader bf = new BufferedReader(new FileReader(file));
            Scanner scan = new Scanner(bf);
            String str = JOptionPane.showInputDialog("digite");
            String readLine=null;
            String bank=null;            
            while (scan.hasNext()) {
                readLine = scan.next();
                if(readLine.contains(str)){
                readLine ="#" +readLine;
                }
                bank +=readLine;

            }
            System.out.println(readLine);
            bf.close();
            PrintWriter pw =new PrintWriter("C:\Arquivo.txt");
            pw.write(bank);
            pw.flush();
            pw.close();
     
}   
}

18 Respostas

lina

Oi,

Utilize o FileOutputStream() ele possui um argumento booleano para append.

Tchauzin!

G

Bem disculpa eu nao sei que que eh isso.

Oi,

Utilize o FileOutputStream() ele possui um argumento booleano para append.

Tchauzin!

nao faço a minima ideia do funcionamento

eu fiz um trem desse tipo mas nao to conseguindo gravar no msm arquivo

File file = new File("c:\Arquivo.txt"); FileInputStream bf = new FileInputStream(file); Scanner scan = new Scanner(bf); String str = JOptionPane.showInputDialog("digite"); String readLine=null; String bank = ""; PrintWriter pw =new PrintWriter("C:\Arquivo1.txt"); while (scan.hasNext()) { readLine = scan.next(); if(readLine.contains(str)){ readLine ="#" +readLine; } bank =readLine; pw.println(bank); } bf.close(); pw.flush(); pw.close();

D

Cara, dá uma estudada no FileOutputStream (como a Lina comentou)…
tem diversos tutoriais bons por ai… dica: se vc utiliza FileInputStream para a leitura, utilize o FileOutpuStream para gravar…

G

Olha nao estou querendo nada facil mas eu juro que eu nao consigo entender as coisas lendo, e alem do mais eu sou bem iniciante e aprendi o pouco que sei foi forçando msm nem sei como pra falar a verdade, se vc pudesse me dar um exemplo pratico dessa aplicaçao juro que nao necessitaria mais de ajuda nisso =)

lina

Oi,

É bem simples... Você poderá fazer:

// Abre o arquivo para gravação.
FileOutputStream
lo_os_file = new FileOutputStream(file,true);

try
{
   // grava os dados no arquivo.
   lo_os_file.write(bank.getBytes());
}
finally
{
   // Fecha o arquiv.
   lo_os_file.close();
}

Tchauzin!

G

Certo mas esse exemplo seu nao vai substituir meu arquivo e nem gravar linha por linha =(
vai continuar o msm arquivo e vai colocar a linha feita embaixo

lina

guialeixo:
mas preciso gravar linha por linha depois de fazer mudanças, e necessita ser no mesmo arquivo
ai segue o codigo

Oi,

Se você fizer o write dentro do while ele irá gravar linha por linha.
Se você quiser limpar seu arquivo antes de começar a gravar nele, apenas de um delete nele e crie ele novamente.

Como já foi dito, procure por FileInput e FileOutput, essa é a melhor solução.

Tchauzin!

G

Bem entao eu fiz isso msm mas como que eu vo fazer pra limpar o arquivo se eu to lendo dele no proprio while?

File file = new File("c:\Arquivo.txt");
            FileInputStream fi = new FileInputStream(file);
            FileOutputStream fo = new FileOutputStream(file,true);

            Scanner scan = new Scanner(fi);
            String str = JOptionPane.showInputDialog("digite");
            String readLine="";
            while (scan.hasNext()) {
                readLine = scan.next();
                if(readLine.contains(str)){
                readLine ="#" +readLine;
                }
                fo.write(readLine.getBytes());
            }
            fi.close();
            fo.close();
lina

Oi,

Faz 2 rotinas. Uma que lê o arquivo e armazena sua informações em String e a outra que grava.

Não tente fazer isso tudo em uma codificação…

Tchauzin!

G

Sera que da certo, pois eu estou lendo de um arquivo e armazenando numa string, e nao da pra armazenar depois no arquivo txt com quebra de linha a string

ps: c deve ta me achando um burro mas eu so msm :cry:

felipehand

Pra ter quebra de linha basta vc colocar “\n” aonde vc quer que quebre.
E se for necessario na rotina que grava vc pode passar como parametro a string e o caminho do arquivo pra vc poder gravar.
[]'s

lina

Oi,

O problema é que estou sem IDE para testar, mas acho que poderia ser feito assim:

File file = new File("c:\Arquivo.txt");
FileInputStream fi = new FileInputStream(file);
		  
Scanner scan = new Scanner(fi);
String str = JOptionPane.showInputDialog("digite");
String readLine="";
String conteudo = "";	
		  
while (scan.hasNext()) {
       readLine = scan.next();
       if(readLine.contains(str)){
		conteudo += "#"+readLine+"\r\n";
	}
}
fi.close();
		  
FileOutputStream fo = new FileOutputStream(file,true);
fo.write(conteudo.getBytes());
		  
fo.close();

Ou fazer assim:

File file = new File("c:\Arquivo.txt");
FileInputStream fi = new FileInputStream(file);
		  
Scanner scan = new Scanner(fi);
String str = JOptionPane.showInputDialog("digite");
String readLine="";
String conteudo = "";	
		  
while (scan.hasNext()) {
       readLine = scan.next();
       if(readLine.contains(str)){
		conteudo += "#"+readLine+"\r\n";
	}
}
fi.close();
		  
String[]
conteudo_quebra	=	conteudo.split("\r\n");
	  
FileOutputStream fo = new FileOutputStream(file,true);
		  
for (int i = 0; i<conteudo_quebra.length; i++) {
	  fo.write(conteudo_quebra[i].getBytes());
}
		  
fo.close();

Tchauzin!

EugenioMonteiro

Já fiz algo parecido usando as classes BufferedReader e BufferedWriter

G

Bem o primeiro funcionou mais ou menos o problema é que ele nao grava por cima e sim grava abaixo, o segundo nao grava =)
ouu me disculpa pelo trabalho q estou lhe dando =)

G

Poderia me dar um exemplo pratico =)?

lina

guialeixo:
Bem o primeiro funcionou mais ou menos o problema é que ele nao grava por cima e sim grava abaixo, o segundo nao grava =)
ouu me disculpa pelo trabalho q estou lhe dando =)

Depois de executar isso:

FileOutputStream fo = new FileOutputStream(file,true);

Você deve fazer:

file.delete(); //Ou clear() não lembro o método..

Tchauzin!

G

lina:
guialeixo:
Bem o primeiro funcionou mais ou menos o problema é que ele nao grava por cima e sim grava abaixo, o segundo nao grava =)
ouu me disculpa pelo trabalho q estou lhe dando =)

Depois de executar isso:

FileOutputStream fo = new FileOutputStream(file,true);

Você deve fazer:

file.delete(); //Ou clear() não lembro o método..

Tchauzin!

ouuu mtoo obrigadoo =))
mto obrigadooo msm

FileOutputStream fo = new FileOutputStream(file,false);

e deu certo ^^
ahuahua

R

Cara, para manipulação de arquivos, sugiro que use a API Commons IO da Apache: <http://commons.apache.org/io/>

no site tem exemplos, docs, e tudo mais.

Criado 14 de setembro de 2009
Ultima resposta 15 de set. de 2009
Respostas 18
Participantes 6