txt sobreescribir modificar manejo leer guardar fichero escribir ejemplos datos contenido como bytes borrar archivos archivo java io output fileinputstream

sobreescribir - JAVA Escribir en un archivo con desplazamiento específico



modificar archivos txt en java (3)

Tengo que escribir un programa que lea un archivo e inserte algún texto dado por el usuario a través de la ventana de la consola. La ubicación en la que se inserta el texto también debe darse a través de la ventana de la consola.

Debajo está mi código, estoy obteniendo "Índice de cadena fuera de rango" después de ingresar la oración y el desplazamiento.

Introduzca la oración: heey

Introduzca la ubicación: 5

Índice de cadena fuera de rango: 9 <- este es el error,

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.util.Scanner; import java.io.Writer; class ReadPosition{ public static void main(String args[]) { try{ FileWriter Writer = new FileWriter("in.txt"); @SuppressWarnings("resource") BufferedWriter bufferedWriter = new BufferedWriter(Writer); Scanner input= new Scanner(System.in); System.out.println("Enter The Sentence: "); String sentence = input.nextLine(); System.out.println("Enter location: "); int offset = input.nextInt(); input.close(); byte[] buffer = sentence.getBytes(); int len = buffer.length; bufferedWriter.write(sentence, offset, len); } catch(Exception ex) { System.out.println(ex.getMessage()); } } }


Esto se debe a que el método de write interna llamará a getchar api para obtener caracteres de offset (5) hasta offset + (sentence.length - offset) (9)

Y tu oración tiene solo 4 caracteres de largo (es decir, heey). Por lo tanto, debe tener un cheque en su código, ese desplazamiento siempre debe ser menor que la sentence.length de la sentence.length es decir, el número de caracteres que contiene.


La línea

bufferedWriter.write(sentence, offset, len);

significa escribir los caracteres len de la sentence comenzando en offset en la sentence .

En otras palabras, la offset es la posición en la oración, no la posición en el archivo de salida.

Si desea insertar texto en un archivo, debe escribir el código para copiar el archivo en un nuevo archivo y agregar el texto en la posición correcta durante la copia.

Además, no deberías estar usando

@SuppressWarnings("resource")

para suprimir la advertencia de falta de cierre, es necesario cerrar el escritor.


Dado es el método para escribir contenido en una posición particular.

Digamos que mi archivo es Test.txt y el contenido es el siguiente

Hello How are you Today is Monday

ahora quieres escribir "hola" después de hola. Entonces el desplazamiento para "hola" será "5".

El método es:

filename = "test.txt"; offset = 5; byte[] content = ("/t hi").getBytes(); private void insert(String filename, long offset, byte[] content) throws IOException { RandomAccessFile r = new RandomAccessFile(filename, "rw"); RandomAccessFile rtemp = new RandomAccessFile(filename+"Temp", "rw"); long fileSize = r.length(); FileChannel sourceChannel = r.getChannel(); FileChannel targetChannel = rtemp.getChannel(); sourceChannel.transferTo(offset, (fileSize - offset), targetChannel); sourceChannel.truncate(offset); r.seek(offset); r.write(content); long newOffset = r.getFilePointer(); targetChannel.position(0L); sourceChannel.transferFrom(targetChannel, newOffset, (fileSize - offset)); sourceChannel.close(); targetChannel.close(); rtemp.close(); r.close();

}

El resultado será:

Hello hi How are you Today is Monday