Uma saída simples:
- Criar uma variável boolean que inicia com FALSE sempre que o texto for carregado
- Ao alterar qualquer conteúdo do texto ela se torna TRUE e não retorna mais para false
- Ao efetuar o scroll ou sair, você verifica pela variável. Se for false, basta sair ou carregar outra parte do texto. Se for true, salva os dados que estão sendo exibidos primeiro…
Contudo, esta saída não é das melhores porque se você resolver carregar, por exemplo, 2000 linhas, se ele alterar “A” para “a” na primeira linha, você vai ter que gravar as 2000 no arquivo…
Então, uma saída interessante é:
- Faça um List … = new ArrayList(); do mesmo tamanho da quantidade de linhas carregadas
- Inicie todo o list com false
- Sempre que o usuário alterar uma linha, você altera o array na posição correspondente (cada posição do array equivale a uma linha visível).
- Agora é similar ao anterior… Caso altere as linhas visíveis ou saia, vc verifica e salva…
Agora, para salvar vai ser um pouco mais complicado…
=D
Parece que seu maior problema está bem aqui: Identificar aonde você está, no arquivo original, e alterar somente aquela parte.
Bom, você pode fazer assim: Ao carregar o início do texto, você sabe a quantidade total de bytes que foram lidos do arquivo.
Experimente pegar esta quantidade e “pular” ela no arquivo original.
Veja as documentações de READ e WRITE:
http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileInputStream.html#read(byte[],%20int,%20int)
http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileOutputStream.html#write(byte[],%20int,%20int)
Elas foram marcadas nos métodos Read(byte[], int, int) e Write(byte[], int, int) que são justamente o que você precisa.
No read() você passa o array de bytes que vai conter os dados LIDOS, e especifica onde vai COMEÇAR a ler no arquivo e O QUANTO vai ser lido.
Similarmente, tem o write() onde você fala o que vai ser GRAVADO, a partir de ONDE vai ser gravado e O QUANTO vai ser gravado.
Experimente brincar com estes métodos =D
Lembrando que para identificar uma nova linha, você pode sempre recorrer à tabela ASCII, que indica como #10 o NL (new line) e #13 o CR (Carriage Return, a.k.a. ENTER)
-> Tabela ASCII: http://www.asciitable.com/
