No se puede editar un archivo .java con un programa java

Soy un principiante en java. Tengo un código de reemplazo de cadena en el que el usuario especifica la ruta del archivo, la cadena para reemplazar y la cadena con la que reemplazar. El código funciona bien con archivos .txt o .in. Pero cuando trato de editar un archivo .java para el cual tenía la intención de escribir el código, de alguna manera no puede editarlo. ¿Alguien puede sugerir dónde está realmente el problema? Mi código es el siguiente:

import java.io.*;
import java.util.*;
public class StringReplace{
    public static void main(String[] args) throws IOException
    {
        System.out.println("Enter path of file:");
        Scanner sc=new Scanner(System.in);
        String path=sc.nextLine();
        File f=new File(path);
        if (f.canRead())
        {
            System.out.print("Now enter the string to replace:_");
            String oldString=sc.nextLine();
            System.out.print("Now enter the string to replace with:_");
            String newString=sc.nextLine();
            StringBuffer sb=new StringBuffer();
            sc=new Scanner(f);
            sc.useDelimiter("");
            while(sc.hasNext())
            {
                sb.append(sc.next());
            }
            sc.close();
            FileWriter fw=new FileWriter(path);
            PrintWriter pw=new PrintWriter(fw,true);
            System.out.println(sb);
            pw.println(sb.toString().replaceAll(oldString, newString));
            fw.close();
            pw.close();
            System.out.print("DONE!");
        }
        else
            System.out.println("File Does Not Exist");
        }
    }
}

preguntado el 25 de agosto de 12 a las 10:08

Bien que do ¿es lo que hace? yo no usaría Scanner para esto, para ser honesto, usaría BufferedReader y solo leía una línea a la vez, probablemente escribiendo sobre la marcha. -

Quién sabe qué problema real es trabajar con flujo binario o de texto. El archivo Java puede contener caracteres Unicode. -

Para mí, el código también funciona bien en el archivo .java. -

@Jon Skeet: estoy usando el escáner aquí con una cadena en blanco como delimitador, ya que necesito conservar todos los delimitadores predeterminados del escáner y el lector almacenado en búfer en el archivo editado. Solo se cambiarán "oldString". -

¿Cuál es el error que obtienes exactamente? -

1 Respuestas

Como dicen los comentarios, no debería haber diferencia entre un archivo ".java" y cualquier otro archivo de texto.

Sospecho que el problema es que no se ha dado cuenta de que su aplicación de edición está codificada para hacer una expresión regular buscar/reemplazar, no una simple búsqueda/reemplazo de cadenas. (Eso es lo que String.replaceAll(...) hace ...) Si, sin saberlo, proporciona una "cadena para reemplazar" que contiene metacaracteres de expresiones regulares, es posible que no coincida o que coincida en un lugar que no esperaba.

Respondido 26 ago 12, 03:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.