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

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

[code]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();

}
}[/code]

Oi,

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

Tchauzin!

Bem disculpa eu nao sei que que eh isso.

[quote]Oi,

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

Tchauzin![/quote]

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();

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…

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 =)

Oi,

É bem simples… Você poderá fazer:

[code]// 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();
}[/code]

Tchauzin!

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

[quote=guialeixo]mas preciso gravar linha por linha depois de fazer mudanças, e necessita ser no mesmo arquivo
ai segue o codigo[/quote]

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!

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

[code]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();[/code]

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!

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:

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

Oi,

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

[code]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();[/code]

Ou fazer assim:

[code]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();[/code]

Tchauzin!

Já fiz algo parecido usando as classes BufferedReader e BufferedWriter

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 =)

Poderia me dar um exemplo pratico =)?

[quote=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 =)[/quote]

Depois de executar isso:

FileOutputStream fo = new FileOutputStream(file,true); 

Você deve fazer:

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

Tchauzin!

[quote=lina][quote=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 =)[/quote]

Depois de executar isso:

FileOutputStream fo = new FileOutputStream(file,true); 

Você deve fazer:

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

Tchauzin![/quote]

ouuu mtoo obrigadoo =))
mto obrigadooo msm

FileOutputStream fo = new FileOutputStream(file,false);

e deu certo ^^
ahuahua

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.