Escribir en un fichero de texto con Java

06/feb/2008 Java , , , , 46 Comentarios
java

Si vamos a escribir en un fichero de texto, sería una buena práctica el validar si dicho fichero existe o no. También podríamos escribir sobre el fichero directamente. Ahora que esto lo haríamos si no nos importase mucho el contenido que este tuviese.

Para validar si existe un fichero podemos leer el ejemplo Saber si existe un fichero con Java. Dicho artículo nos explica de forma detallada lo simple que esto resulta.

Resumiendo, bastará utilizar el método exists() de la clase File.

  1. String sFichero = "fichero.txt";
  2. File fichero = new File(sFichero);
  3.  
  4. if (fichero.exists()) {...}

En el caso de que no exista el fichero, nos pondremos manos a la obra para escribir sobre el fichero.

Lo primero que tendremos que hacer será crear un BufferedWriter. Esta clase nos ayuda a manejar los stream en forma de buffer con métodos muy sencillos. Este buffer necesitará saber cual es el fichero. Esto se lo proporcionamos desde la clase FileWriter.

Recuerda que la filosofía de acceso a la lectura y escritura a los ficheros, siempre es la misma. Buffer, que envuelve a Reader, que a su vez envuelve al fichero (o stream).

El código nos quedaría algo así:

  1. BufferedWriter bw = new BufferedWriter(new FileWriter(sFichero));

Para escribir texto nos apoyamos en el método .write() del buffer. Muy sencillo. La verdad es que no se me ocurría que texto grabar sobre el fichero, a si que, al final, vamos a volcar 10 líneas iguales ayudándonos de un bucle for.

  1. for (int x=0;x<10;x++)
  2. bw.write("Fila numero " + x + "\n");

No nos podemos olvidar de dos últimas cosas. Siempre que manejemos el fichero para escribir deberemos de cerrarle con el método .close().

Y lo otro, que toda la operativa de la clase java.io.* nos avisará de sus problemas de acceso a fichero, elevándonos una excepción IOException. Que habrá que capturar en alguna parte de nuestro código.

Vídeos sobre Java IO

Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

46 comentarios en “Escribir en un fichero de texto con Java”

Víctor Cuervo

start up businesses

Great beat ! I would like to apprentice whiilst
you amend your site, how could i subscribe for a weblog web site?
The account helped mee a acceptable deal. I
had been a little bit familiar of this your broadcast offered shiny transparent concept

Feel frree to surf to my blog – start up businesses

Víctor Cuervo

RIki

Te has olvidado de cerrar el bufferedReader, sin hacerlo no os funcionara.
// bw.close();

Víctor Cuervo

Rizzolli

Malisimo el ejemplo.

Víctor Cuervo

Víctor Cuervo

@Jorge,

Combinando este ejemplo con el de lectura de datos desde la consola (http://lineadecodigo.com/java/lectura-de-datos-por-consola-en-java/) deberías de poder realizar tu programa.

Saludos.

Víctor Cuervo

Norman

Jorge, mandame un correo a n.glaves@gmail.com , en el transcurso de la mañana en chile o quizas para la hora de almuerzo pueda darte una mano al respecto

Víctor Cuervo

Jorge

Podría ser posible que hicieran un programa que pidiera datos por consola y luego los escribiera en un fichero?.

He intentado hacerlo y pues no me va.

Gracias.

Víctor Cuervo

Norman Glaves

Estoy algo Colgado
por que logro generar el fichero sin problemas
pero no puedo escribir mas que la linea original…
despues al tratar de agregar mas lineas a mi fichero .txt
no lo hace

PD: Super util tu pag, estoy aciendo la practica profecional y e aprendido cosas que no me enseñaron en la Uni

Víctor Cuervo

marc

hola… a ver… este programa en teoría la segunda vez que sale el menú (misma ejecución) tiene que volver a leer desde el principio del fichero pero se ve que ni lee… (o eso creo que es el problema) cómo podría hacer que empiece desde el principio a leer?

package practica1;
import java.io.*;
public class primeraPractica {
public static int ent;
public static char car;
public static final char BLANCO=’ ‘;
public static final char FIN_TEXTO=’.’;
public static final char RETURN=’\r’;
public static final char FIN_FRASE=’\n’;
public static final int MAX=50;
public static class guardar_linea{
char linea[]=new char [MAX+1];
int longitud=0;
}
public static guardar_linea linea= new guardar_linea();
public static void menu_opciones(){
try{
System.out.print(” Elija una opción:”+FIN_FRASE
+ ” 1. Pulsar ‘1’ si desea justificar a la izquierda.”+FIN_FRASE
+ ” 2. Pulsar ‘2’ si desea centrar el texto.”+FIN_FRASE
+ ” 3. Pulsar ‘3’ si desea justificar a la derecha.”+FIN_FRASE
+ ” 4. Pulsar ‘4’ si quiere salir del programa.”+FIN_FRASE
+ ” Introduzca la opción: “);
}catch (Exception e){}
}
public static void saltar_blancos(BufferedReader f){
try{
while (car==BLANCO){
ent=f.read();
car=(char)ent;
}
}catch (Exception e){}
}
public static void guardar_frase_por_palabras(BufferedReader f){
try{
while (ent!=-1&&car!=FIN_FRASE){
while (ent!=-1&&car!=FIN_FRASE&&car!=BLANCO){
linea.linea[linea.longitud]=car;
linea.longitud++;
ent=f.read();
car=(char)ent;
}
linea.linea[linea.longitud]=BLANCO;
linea.longitud++;
while (car==BLANCO){
ent=f.read();
car=(char)ent;
}
}
}catch (Exception e){}
}
public static void izquierda(BufferedReader f, BufferedWriter g){
try{
guardar_frase_por_palabras(f);
visualizacion_izquierda(g);
}catch (Exception e){}
}
public static void visualizacion_izquierda(BufferedWriter g){
try{
int i;
char neutra;
for (i=0;i<(linea.longitud-2); i++){
neutra=linea.linea[i];
g.write(neutra);
System.out.print(neutra);
}
for (i=0; i<(MAX-(linea.longitud-1));i++){
g.write(BLANCO);
System.out.print(BLANCO);
}
}catch (Exception e){}
}
public static void centrar(BufferedReader f, BufferedWriter g){
try{
guardar_frase_por_palabras(f);
visualizacion_centrada(g);
}catch (Exception e){}
}
public static void visualizacion_centrada(BufferedWriter g){
try{
int i;
int x;
char neutra;
if ((linea.longitud%2)==0){
x=(MAX+1)-(linea.longitud-2);
x=x/2;
x=x-1;
for (i=0; i<=x; i++){
g.write(BLANCO);
System.out.print(BLANCO);
}
for (i=0; i<(linea.longitud-2); i++){
neutra=linea.linea[i];
g.write(neutra);
System.out.print(neutra);
}
for (i=0; i<x; i++){
g.write(BLANCO);
System.out.print(BLANCO);
}
}
else{
x=(MAX+2)-(linea.longitud-2);
x=x/2;
x=x-1;
for (i=0; i<x; i++){
g.write(BLANCO);
System.out.print(BLANCO);
}
for (i=0; i<(linea.longitud-2); i++){
neutra=linea.linea[i];
g.write(neutra);
System.out.print(neutra);
}
for (i=0; i<x; i++){
g.write(BLANCO);
System.out.print(BLANCO);
}
}
}catch (Exception e){}
}
public static void derecha(BufferedReader f, BufferedWriter g){
try{
guardar_frase_por_palabras(f);
visualizacion_derecha(g);
}catch (Exception e){}
}
public static void visualizacion_derecha(BufferedWriter g){
try{
int i;
char neutra;
for (i=0; i<(MAX-(linea.longitud-2));i++){
g.write(BLANCO);
System.out.print(BLANCO);
}
for (i=0; i<(linea.longitud-1); i++){
neutra=linea.linea[i];
g.write(neutra);
System.out.print(neutra);
}
}catch (Exception e){}
}
public static void cambiar_linea_e_ir_a_por_siguiente(BufferedReader f, BufferedWriter g){
try{
System.out.print(FIN_FRASE);
g.newLine();
linea.longitud=0;
if (car==FIN_FRASE){
ent=f.read();
car=(char)ent;
}
saltar_blancos(f);
}catch (Exception e){}
}
public static void main (String[]args){
try{
int opcion=0;
String entrada;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
FileReader fichero1=new FileReader("texto.txt");
BufferedReader buffer1= new BufferedReader (fichero1);
menu_opciones();
entrada=in.readLine();
opcion=Integer.parseInt(entrada);
while (opcion!=4){
FileWriter fichero2= new FileWriter("justificat.txt");
BufferedWriter buffer2= new BufferedWriter (fichero2);
if (opcion==1){
ent=fichero1.read();
car=(char)ent;
saltar_blancos(buffer1);
while (ent!=-1){
izquierda(buffer1, buffer2);
cambiar_linea_e_ir_a_por_siguiente(buffer1,buffer2 );
}
buffer2.close();
}
else
if (opcion==2){
ent=fichero1.read();
car=(char)ent;
saltar_blancos(buffer1);
while (ent!=-1){
centrar(buffer1, buffer2);
cambiar_linea_e_ir_a_por_siguiente(buffer1,buffer2 );
}
buffer2.close();
}
else{
if (opcion==3)
ent=fichero1.read();
car=(char)ent;
saltar_blancos(buffer1);
while (ent!=-1){
derecha(buffer1, buffer2);
cambiar_linea_e_ir_a_por_siguiente(buffer1,buffer2 );
}
buffer2.close();
}
menu_opciones();
entrada=in.readLine();
opcion=Integer.parseInt(entrada);
}
}catch (Exception e){}
}
}

Víctor Cuervo

lineadecodigo

Si estás utilizando .write() de la clase BufferedWriter para escribir en el fichero, puedes utilizar el método .newLine() para insertar un salto de línea.

Víctor Cuervo

marc

hola, cómo puedo meter un enter/return… en un fichero…? sí, es mi mayor problema jajaja solo necesito eso

Víctor Cuervo

Henry Gomez

Muy buenas lo que necesito hacer es crear un archivo de texto con un numero en cada linea, secuencial 0,1,2,…….
0
1
2
que el programa pregunte desde que numero hasta que numero y el resultado cree un archivo de texto, el largo del numero seria 30 digitos
y en que otro tipo de archivo se podria hacer la salida, txt,xls,doc,….

Víctor Cuervo

beto

tema: LECTURA Y ESCRITURA DE ARCHIVOS ASP
hola que tal como esta es mi duda es la siguiente : tengo 5 campos para grabar en asp, guarda solo la primera vez y la segunda me la sobreescribe en el archivo. agradecido de antemano beto

Dim sw As StreamWriter
Dim archivo As String
Dim linea As String

archivo = (“E:\archivo\notas.txt”)
sw = File.CreateText(archivo)
linea = TextBox1.Text & vbTab & TextBox7.Text & vbTab & TextBox3.Text & vbTab & TextBox2.Text & vbTab & TextBox4.Text
sw.WriteLine(linea)
sw.Close()

Víctor Cuervo

antonio

me puede ayudar por favor como poder explicar la linea de codigo para cerrar un fichero…

Víctor Cuervo

Pierre

Hola, alguien puede ayudarme … necesito insertar un txt en java, tengo un trabajo que trata acerca de un corrector ortografico … tengo un diccionario de palabras en un archivo txt, lo quiero trabajar mediante un arbol trie … como hago para llamar a ese archivo txt ?

Ayudenme con esto por favor!

Víctor Cuervo

harry.com

Hola, disulpas por mi ignorancia, pero soy nuevo en el tema de Java?

Alguien me puede indicar cual es el cuerpo estandar de una aplicación Java?

Mi deseo es profundizar en el tema, pero la mayor parte de info aparece en inglés y para mi es muy confuso aún, puesto que no sé mucho de Java!!

Además quiero capturar pulsaciones de teclado (eso ya lo tengo en un area de texto), pero quiero colocarlo todo en un archivo!!

Gracias a quien me pueda ayudar

Víctor Cuervo

Pipo Di Borracho

hola a todos… estoy tratando de hacer un chat con interfaz grafica y emoticones.

mi problema es, en el formulario donde estoy haciendo el interfaz, coloque un JTextField y al presionar el boton enviar, quiero que me capture todo el texto del JTextField para enviarlo a otro.

por favor si alguien me puede ayudar le agradeceré mucho…

Víctor Cuervo

Enrique

Disculpen, ya logre solucionar… El error se encontraba en el aarchivo ya que no se encontraba los datos de la fecha… y al buscar encontraba que no habia nada…Asi que ahora funciona perfectamente

Víctor Cuervo

Enrique

Hola, estoy tratando de leer desde un txt BIEN EXTENSO, hacer unas modificaciones de esos datos y escribirlos a otro txt con el formato que deseo, el problema ocurre cuando ya ha escrito aproximado 2000 lineas y me aparece este error.

run:
Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1938)
at bddigitalizacion.Main.main(Main.java:50)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

les adjunto el código.

import java.io.*;
public class Main
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
try
{
//Abrimos el archivo del cual extraeremos los datos
BufferedReader in = new BufferedReader(new FileReader(“C:\\Clientes.txt”));
//Creamos el archive destino
BufferedWriter out = new BufferedWriter(new FileWriter(“C:\\ClientesSQL.txt”));

//Leemos línea por línea el archivo origen
String p = System.getProperty(“line.separator”);
String s = in.readLine();
int puntoComa;
String numero;
String cedula;
String fecha;
String dia;
String mes;
String año;
if (s != null)
{
while ((s = in.readLine()) != null)
{
puntoComa=s.indexOf(“;”);
numero=s.substring(0, puntoComa);
s=s.substring(puntoComa+1);
puntoComa=s.indexOf(“;”);
cedula=s.substring(0, puntoComa);
s=s.substring(puntoComa+1);
puntoComa=s.indexOf(“-“);
dia=s.substring(0,puntoComa);
s=s.substring(puntoComa+1);
puntoComa=s.indexOf(“-“);
mes=s.substring(0, puntoComa);
s=s.substring(puntoComa+1);
año=s;
fecha=(año+”-“+mes+”-“+dia);
//System.out.println(numero);
//System.out.println(cedula);
//System.out.println(fecha);
//Escribimos cada línea en el archivo destino
out.write(“(‘”+numero+”‘, ‘”+cedula+”‘, ‘”+fecha+”‘),”+p);
}
}
out.close();
in.close();
}
catch (IOException ex)
{
}
}
}

Víctor Cuervo

ronald

hola, gracias por sus cometarios al leerlos despeje una duda que tenia

Víctor Cuervo

green31

hoola! mi problema es este,
tengo ke enviar una dato, un nombre por ejemplo a una tabla en java
jTable,
eso desde un archivo txt. Ya para despues de agregadoa la tabla, modificarlo.
Me serviria mucho tu respuesta.
Tengo mucho tiempo sin poder.
Por tu ayuda gracias!!!

Víctor Cuervo

DAMR1990

Hola, quisiera saber si hay alguna manera añadir texto a una linea ya existente en vez de añadirlo hasta el final
p. eh

1 ab
2 cd
3 ef

y quisiera agregarle un tramo adicional a la linea dos para que quede

1 ab
2 cdgh
3 ef

Víctor Cuervo

lineadecodigo

@Asereje,

Lo que necesitas lo encuentras en el artículo Pagina Web para descargar archivos.

Espero que te sea de ayuda.

Víctor Cuervo

lineadecodigo

@igniz,

Es que lo que estás volcando al fichero es lo que estás pidiendo por consola…

String texto = scaner.next();

Si quieres volcar el contenido del ResultSet tendrás que hacer el volcado al fichero dentro del bucle que lo recorre…

BufferedWriter bw = new BufferedWriter(new FileWriter(fichero, false));
while (rs.next()){
String nombre = rs.getString(“TABLE_NAME”);
bw.write(nombre);
}

Espero que te ayude la respuesta…

Víctor Cuervo

igniz

el codigo es este

public void run()
{

{
//String driver = “org.postgresql.Driver”;
String driver = “com.microsoft.sqlserver.jdbc.SQLServerDriver”;

//String driver = “.:/usr/share/java/postgresql.jar”;
String connectString = “jdbc:sqlserver://localhost;databaseName=MUDANZA;”;
String user = “sa”;
String password = “pereza”;

try{
Class.forName(driver);
Connection con = DriverManager.getConnection(connectString, user , password);
Statement stmt = con.createStatement();

stmt=con.createStatement();
stmt.execute(“use MUDANZA”);

ResultSet rs = stmt.executeQuery(“select TABLE_NAME from information_schema.tables ORDER BY TABLE_NAME “);
while (rs.next()){

String nombre = rs.getString( “TABLE_NAME” );

System.out.println(“127.0.0.1 ” + nombre);

}

stmt.close();
con.close();

Scanner scaner = new Scanner(System.in);
String texto = scaner.next();
while (texto != null){

texto = texto + “\n”;
String sFichero = “C:\\fichero.txt”;
File fichero = new File(sFichero);

BufferedWriter bw = new BufferedWriter(new FileWriter(fichero, false));
bw.write(texto);

}

}

catch ( Exception e ){
System.out.println(e.getMessage());
}}

Víctor Cuervo

lineadecodigo

@igniz,

Pon tu código en el foro de Java File a ver si podemos ayudarte…

Víctor Cuervo

igniz

estoy insertando en el fichero creado una lista con las tablas de una base de datos pero solo me inserta la ultima linea
alguien ayudeme

Víctor Cuervo

lineadecodigo

@Javier Lopez,

¿Qué librerías estás utilizando para la parte gráfica? ¿AWT, Swing, SWT?

Entiendo que quieres mediante una aplicación visual crear el fichero y que este sea una clase Java.

¿Es correcto?

Víctor Cuervo

Javier Lopez del castillo Caymares

como yo creo una clase fichero en java y como guardo despues informacion de un visual para ese fichero, y como despues yo lo recupero

Víctor Cuervo

Angel Su.

Jejejeje, que bien, gracias. Nota no usen bw.write( “\n” ); es una mala idea para el salto de linea, mejor usen el bw.newLine(); asi no tendran problemas de visualizacion en ningun editor debido al sistema de codificación UNICODE, ASCII, UTF-8, etc. o al menos a mi me funciona mejor. :xD.

Víctor Cuervo

jorge2911

hola tengo una pregunta como ago para que:

1. me guarde el texto antes o despues del que ya contenga el archivo
2. y que mantenga el formato en que lo guardo con esto digo que no me guarde todo en una sola linea
3. guardarlo en forma de tabla para hacer una especie de agenda
nombre direccion telefono

disculpa si pido mucho, si puedes me das una referencia para investigar es que no se por donde empezar estoy novato
gracias de ante mano…

Víctor Cuervo

abraham

es todo lo que me falta

Víctor Cuervo

abraham

y por ejemplo como podria hacer para leer numeros de un fichero txt, por ejemplo: numero de articulos:
pedido1 = 10 articulos
pedido2 = 20 articulos

y luego de leerlos sumarlos para obtener el total de articulos?

Víctor Cuervo

Asereje

Hola, tengo una pregunta:
Si el fichero esta colgado en la web y solo puedo acceder a el mediante su ruta ej: “http://miweb.com/ficheros/fichero.txt” como podria hacerlo?
Gracias

Víctor Cuervo

edgar

un programa que sea una biblioteca y que funcione por medio de ficheros en java

Víctor Cuervo

Feanor

Gracias che. Hace dias que no sabia como hacer para escribir en un fichero. El metodo estaba bien, pero, como bien aclaraste, habia olvidado cerrar el fichero al terminar de escribir en el.

Víctor Cuervo

Berna

Por cierto, siendo más específicos, según tu ejemplo sería así:
fw.write(”texto”+ “\n”);

😉 Ciaooo

Víctor Cuervo

Berna

Hola fede, en relación a tu pregunta de por que no te funciona cuando usas el buffered, es por que al usar grupos de memoria, tienes que decirle a la JVM que has acabado para forzar la escritura en disco. Eso se consigue añadiendo al final de la linea un CR + LF
(retorno de carro y añadir línea).
En otras palabras sí que te está funcionando pero la JVM no está entregando el valor. Cuando no usas el buffered la escritura en disco es directa, por lo que aparentemente es más rápida, pero para no sobrecargar el acceso a disco cuando son ficheros grandes lo mejor es que te apoyes en el buffer.

Saludos,
Berna

Víctor Cuervo

Jose

Pon atencion!
ya tengo creado el archivo pero necesito que me agregue
ain borrar lo que ya tengo echo ¿como hago?

Víctor Cuervo

fede

Esta muy bueno pero tengo una super duda, yo tengo el siguiente codigo:
File f=new File(“/home/sefsinalas/Desktop/mi_archivo.txt”);
FileWriter fw= new FileWriter(f,false);
fw.write(“texto”);
fw.close();

ya lo he probado y funciona, pero porque anda si no tiene bufferedwriter? Por favor expliquenme eso? para que sirve el buffered?

Víctor Cuervo

francisco

perfecto!
cree un log para mi servlet y ese parametro me concatena en el .txt todos lo que pasa por el servlet
muchas gracias!

Víctor Cuervo

Gatto

prueba FileWriter(sFichero,true)

Víctor Cuervo

francisco

este codigo me actualiza lo que tengo
quiero que siga escribiendo cada vez que le mando o llamo a la funcion.
probe con FileWriter(sFichero,false) y no pasa nada :(

Víctor Cuervo

argenis

no entiendo nada

Víctor Cuervo

ryck

buenas,busco una forma de escribir en un archivo por lineas pro lo unico q hace es reemplazarme lo q ya tenia escrito….:(

Víctor Cuervo

Doctor Lecter

Prueba con: BufferedWriter bw = new BufferedWriter(new FileWriter(sFichero,false));

Víctor Cuervo

will

Hola yo solo quiero que el fichero que he creado se actualize, pero cada vez que creo un fichero con java su contenido se agrega al final del ya existente, no se como puedo solucionar esto gracias

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*


*