Pues si todavía sigues con el problema, aquí tengo una solución simple pero funcional
Código:
package com.cambiarstring.main;
import java.io.*;
import java.util.*;
public class CambiarStringMain {
public static void main(String[] args) {
// Recursos necesarios para la lectura
FileReader fr = null;
BufferedReader br = null;
// Recursos necesarios para la escritura
FileWriter fw = null;
PrintWriter pw = null;
// Lista de string actualizada
List<String> filas = new ArrayList<String>();
String[] cadena = null;
try {
String ruta = "C:\\Users\\Quality\\Desktop\\string.txt";
// Comienza la lectura del archivo especificado en la ruta
File archivo = new File (ruta);
fr = new FileReader (archivo);
br = new BufferedReader(fr);
String linea;
while((linea=br.readLine())!=null){
cadena = linea.split(" ");
if (cadena[3].equals("OK")){
cadena[3] = "ENVIADO";
}
filas.add(cadena[0] + " " + cadena[1] + " " + cadena[2] + " " + cadena[3] + " ");
}
try {
// Inicializamos los recursos de escritura de archivo por unica vez
fw = new FileWriter(ruta);
pw = new PrintWriter(fw);
for(int i = 0; i < filas.size(); i++){
pw.println(filas.get(i));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// Liberamos los recursos de escritura
try {
fr.close();
fw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} catch(Exception e){
e.printStackTrace();
} finally{
try{
// Liberamos los recursos de lectura
pw.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
Te explico... De acuerdo a tu archivo podemos ver que tienes un separador el cual viene siendo el espacio, entonces, primeramente hacemos que cada linea del archivo leído sea un String el cual podemos manipular, en este caso viene perfecto usar el método
split(), ya que por cada espacio que encuentre en la String creara un arreglo de Strings; es decir, por cada String "P01 24/03/2015 11:04:25 OK" creara lo siguiente:
1.- P01
2.- 24/03/2015
3.- 11:04:25
4.- OK
Para mayor información acerca del método, te invito a leer la API de Java.
Como podemos observar, para poder acceder al valor del "OK" unicamente hacemos referencia a la posición(index), de esta manera es cuestion de hacer una simple comparacíon entre el valor que recupera y la palabra con ayuda del metodo
equals(), donde sustituimos el valor por "ENVIADO" si la condición se cumple.
Continuamos creamos la estructura del archivo y la añadimos a un arreglo de tipo String, el cual ya tendrá el valor cambiado si llega a cumplirse la condición.
Finalmente, recorremos la lista de String y por cada item de la lista, vamos escribiendo en el archivo.
Eso sería todo, cualquier aclaración, duda y/o comentario, aquí estaremos.