Problema com edição de arquivo

Pessoal,

Tenho um método que lê e escreve no mesmo arquivo.

Esse método recebe dois parâmentro, um é o valor de uma linha e o outro é o valor do dado dessa linha.

Aí, ele vai procurando no arquivos alguns lugares para colocar o valor do dado que está linha.

Mas o problema q estou tendo é que sempre q ele fecha o arquivo é salvo em branco ou grava apenas o dado da última linha.

Esse é o método:


public void createIndexSMILCode(String textFile, int linha) {
        
        try {
            
            FileReader reader = new FileReader("C:\\Documents and Settings\\vlima\\Desktop\\Teste do Gravador\\t6\\index.smil");
            BufferedReader leitor = new BufferedReader(reader);           
            
            
            PrintStream out = new PrintStream("C:\\Documents and Settings\\vlima\\Desktop\\Teste do Gravador\\t6\\index.smil"); 
            
            for( int t=0; t<linha; t++){
            
                String s = null;
                do {
                    s = leitor.readLine();

                    if(s != null) {
                        if(s.trim().toLowerCase().startsWith("<!-- begin" + linha + " -->")) {                        
                                out.println("<href=\"" + textFile + ".smil\">");                            
                            continue;
                        } else if(s.trim().toLowerCase().startsWith("<!-- end" + linha + " -->")) {
                            continue;
                        }                    
                        out.println(s);
                    }
                } while(s != null);
            
            }
            
            leitor.close();
            reader.close();
            out.close();
            
        } catch(Exception e) {
            Log.warning("Exception when trying to create SMIL code for presentation", e);
        }
        
    }//createIndexSMILCode

Pelo que vi no seu código, o seu PrintStream não está sendo posicionado na linha que vc quer editar. Ele simplesmente está escrevendo no começo do arquivo e o que é pior, está truncando tudo. Eu nunca tinha usado PrintStream, mas dei uma olhada na API e não tem método append ou seek ou qualquer coisa equivalente…
Vc tem que usar uma classe que te possibilite posicionar a escrita em um ponto específico do arquivo. Vc iria lendo até achar a linha que vc quer e contando quantos bytes foram lidos (1 caracter = 1 byte, contando com espaços, quebras de linha, etc). Quando achar a linha, vc busca o trecho de texto desejado dentro da linha e faz o replace… Eu sempre prefiro criar uma cópia do arquivo, já alterado, depois apagar o antigo… hehehe
Mas pelo que eu vi PrintStream não serve pra isso não!

Abraço!