una txt texto reemplazar palabra modificar linea letra leer eliminar crear como archivos archivo java replace line jcheckbox

txt - modificar linea archivo texto java



Java Reemplazar lĂ­nea en archivo de texto (6)

Bueno, necesitaría obtener un archivo con JFileChooser y luego leer las líneas del archivo usando un escáner y la función hasNext ()

http://docs.oracle.com/javase/7/docs/api/javax/swing/JFileChooser.html

una vez que lo haces, puedes guardar la línea en una variable y manipular los contenidos.

¿Cómo reemplazo una línea de texto encontrada dentro de un archivo de texto?

Tengo una cadena como:

Do the dishes0

Y quiero actualizarlo con:

Do the dishes1

(y viceversa)

¿Cómo logro esto?

ActionListener al = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JCheckBox checkbox = (JCheckBox) e.getSource(); if (checkbox.isSelected()) { System.out.println("Selected"); String s = checkbox.getText(); replaceSelected(s, "1"); } else { System.out.println("Deselected"); String s = checkbox.getText(); replaceSelected(s, "0"); } } }; public static void replaceSelected(String replaceWith, String type) { }

Por cierto, quiero reemplazar SÓLO la línea que se leyó. NO el archivo completo.


Si el reemplazo es de diferente duración:

  1. Lea el archivo hasta que encuentre la cadena que desea reemplazar.
  2. Lea en la memoria la parte del texto que desea reemplazar, todo.
  3. Trunque el archivo al inicio de la parte que desea reemplazar.
  4. Escribir reemplazo.
  5. Escriba el resto del archivo del paso 2.

Si el reemplazo es de la misma longitud:

  1. Lea el archivo hasta que encuentre la cadena que desea reemplazar.
  2. Establezca la posición del archivo para el inicio de la parte que desea reemplazar.
  3. Escribir reemplazo, sobrescribiendo parte del archivo.

Esto es lo mejor que puede obtener, con restricciones de su pregunta. Sin embargo, al menos el ejemplo en cuestión reemplaza una cadena de la misma longitud, por lo que la segunda forma debería funcionar.

También tenga en cuenta: las cadenas Java son texto Unicode, mientras que los archivos de texto son bytes con alguna codificación. Si la codificación es UTF8 y su texto no es Latin1 (o ASCII simple de 7 bits), debe verificar la longitud de la matriz de bytes codificada, no la longitud de la cadena de Java.


Desde Java 7 esto es muy fácil e intuitivo de hacer.

List<String> fileContent = new ArrayList<>(Files.readAllLines(FILE_PATH, StandardCharsets.UTF_8)); for (int i = 0; i < fileContent.size(); i++) { if (fileContent.get(i).equals("old line")) { fileContent.set(i, "new line"); break; } } Files.write(FILE_PATH, fileContent, StandardCharsets.UTF_8);

Básicamente, lee todo el archivo en una List , edita la lista y finalmente vuelve a escribir la lista en el archivo.

FILE_PATH representa la Path del archivo.


Iba a responder esta pregunta. Luego vi que se marcaba como un duplicado de esta pregunta, después de escribir el código, así que voy a publicar mi solución aquí.

Ten en cuenta que debes volver a escribir el archivo de texto. Primero leo el archivo completo y lo guardo en una cadena. Luego guardo cada línea como un índice de una matriz de cadenas, por ejemplo, una línea = índice de matriz 0. Luego edito el índice correspondiente a la línea que desea editar. Una vez hecho esto, concateno todas las cadenas de la matriz en una sola cadena. Luego escribo la nueva cadena en el archivo, que escribe sobre el contenido anterior. No se preocupe por perder su contenido anterior, ya que se ha escrito nuevamente con la edición. a continuación está el código que utilicé.

public class App { public static void main(String[] args) { String file = "file.txt"; String newLineContent = "Hello my name is bob"; int lineToBeEdited = 3; ChangeLineInFile changeFile = new ChangeLineInFile(); changeFile.changeALineInATextFile(file, newLineContent, lineToBeEdited); } }

Y la clase.

import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; public class ChangeLineInFile { public void changeALineInATextFile(String fileName, String newLine, int lineNumber) { String content = new String(); String editedContent = new String(); content = readFile(fileName); editedContent = editLineInContent(content, newLine, lineNumber); writeToFile(fileName, editedContent); } private static int numberOfLinesInFile(String content) { int numberOfLines = 0; int index = 0; int lastIndex = 0; lastIndex = content.length() - 1; while (true) { if (content.charAt(index) == ''/n'') { numberOfLines++; } if (index == lastIndex) { numberOfLines = numberOfLines + 1; break; } index++; } return numberOfLines; } private static String[] turnFileIntoArrayOfStrings(String content, int lines) { String[] array = new String[lines]; int index = 0; int tempInt = 0; int startIndext = 0; int lastIndex = content.length() - 1; while (true) { if (content.charAt(index) == ''/n'') { tempInt++; String temp2 = new String(); for (int i = 0; i < index - startIndext; i++) { temp2 += content.charAt(startIndext + i); } startIndext = index; array[tempInt - 1] = temp2; } if (index == lastIndex) { tempInt++; String temp2 = new String(); for (int i = 0; i < index - startIndext + 1; i++) { temp2 += content.charAt(startIndext + i); } array[tempInt - 1] = temp2; break; } index++; } return array; } private static String editLineInContent(String content, String newLine, int line) { int lineNumber = 0; lineNumber = numberOfLinesInFile(content); String[] lines = new String[lineNumber]; lines = turnFileIntoArrayOfStrings(content, lineNumber); if (line != 1) { lines[line - 1] = "/n" + newLine; } else { lines[line - 1] = newLine; } content = new String(); for (int i = 0; i < lineNumber; i++) { content += lines[i]; } return content; } private static void writeToFile(String file, String content) { try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8"))) { writer.write(content); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static String readFile(String filename) { String content = null; File file = new File(filename); FileReader reader = null; try { reader = new FileReader(file); char[] chars = new char[(int) file.length()]; reader.read(chars); content = new String(chars); reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return content; } }


Probado y funciona

public static void replaceSelected(String replaceWith, String type) { try { // input the file content to the StringBuffer "input" BufferedReader file = new BufferedReader(new FileReader("notes.txt")); String line; StringBuffer inputBuffer = new StringBuffer(); while ((line = file.readLine()) != null) { inputBuffer.append(line); inputBuffer.append(''/n''); } String inputStr = inputBuffer.toString(); file.close(); System.out.println(inputStr); // check that it''s inputted right // this if structure determines whether or not to replace "0" or "1" if (Integer.parseInt(type) == 0) { inputStr = inputStr.replace(replaceWith + "1", replaceWith + "0"); } else if (Integer.parseInt(type) == 1) { inputStr = inputStr.replace(replaceWith + "0", replaceWith + "1"); } // check if the new input is right System.out.println("----------------------------------/n" + inputStr); // write the new String with the replaced line OVER the same file FileOutputStream fileOut = new FileOutputStream("notes.txt"); fileOut.write(inputStr.getBytes()); fileOut.close(); } catch (Exception e) { System.out.println("Problem reading file."); } } public static void main(String[] args) { replaceSelected("Do the dishes", "1"); }

Contenido original del archivo de texto:

Hacer los platos0
Alimenta al perro0
Limpié mi habitación1

Salida:

Hacer los platos0
Alimenta al perro0
Limpié mi habitación1
----------------------------------
Hacer los platos1
Alimenta al perro0
Limpié mi habitación1

Nuevo contenido de archivo de texto:

Hacer los platos1
Alimenta al perro0
Limpié mi habitación1

Y como una nota, si el archivo de texto era:

Hacer los platos1
Alimenta al perro0
Limpié mi habitación1

y replaceSelected("Do the dishes", "1"); el método replaceSelected("Do the dishes", "1"); , simplemente no cambiaría el archivo.


cómo reemplazar cadenas :) como lo hago primero arg será el nombre de archivo segunda cadena de destino tercera una la cadena que se reemplazará en lugar de la segmentación

public class ReplaceString{ public static void main(String[] args)throws Exception { if(args.length<3)System.exit(0); String targetStr = args[1]; String altStr = args[2]; java.io.File file = new java.io.File(args[0]); java.util.Scanner scanner = new java.util.Scanner(file); StringBuilder buffer = new StringBuilder(); while(scanner.hasNext()){ buffer.append(scanner.nextLine().replaceAll(targetStr, altStr)); if(scanner.hasNext())buffer.append("/n"); } scanner.close(); java.io.PrintWriter printer = new java.io.PrintWriter(file); printer.print(buffer); printer.close(); } }