Leer fichero de texto con Java

26/Dic/2006 Java , , , 33 Comentarios
Programación en Java

Cuando tratamos con estructuras de tipo stream para realizar lecturas y escrituras, los pasos habituales son el ir apoyándonos en clases que nos faciliten el manejo del dispositivo de destino, desde la de más alto nivel a la de menor nivel. Lo que técnicamente denominaríamos wrapping.

Para manejar cadenas de texto (Java String), la estructura que nos ayuda, en Java IO, a ello es el BufferedReader. Pero a este nivel, todavía no hemos identificado el dispositivo de destino.

En la lectura de ficheros de texto, lo primero que tenemos que hacer es crear un Reader de tipo fichero. Esto es encapsulado en la clase FileReader. Será esta clase la que utilice el buffer como origen de lectura.

Quedándonos estas simples líneas:

FileReader fr = new FileReader("datos.txt");
BufferedReader bf = new BufferedReader(fr);

O en un formato mas «técnico» podríamos irnos a tener una sola linea de codigo:

BufferedReader bf = new BufferedReader(new FileReader("datos.txt"));

Ahora solo nos queda es ir leyendo del fichero. Para ello utilizaremos los métodos de BufferedReader. Y en concreto el que nos va dando línea a línea readLine(), La lectura se hará de forma repetitiva hasta que la lectura de la línea sea nula.

while ((sCadena = bf.readLine())!=null) {
   System.out.println(sCadena);
}

Hay que tener especial cuidado con el manejo de las excepciones. Todo manejo con la librería java.io nos hará estar expuestos al manejo de la excepción IOException.

Y tampoco podemos olvidar que a la hora de realizar la lectura de un fichero, este, no exista. En ese caso se lanzará una excepción FileNotFoundException.

Vídeos sobre Java


33 comentarios en “Leer fichero de texto con Java”

Víctor Cuervo

Roberto

Hola ,tengo un problema desde hace varios días,y es que cuando pongo la ruta de un fichero,cualquiera, no me lo reconoce.Antes lo hacía pero ahora nada.

Mi código es este:

Nombre de la clase pública {

Método Main {

File fichero = new File(«C:/Nueva carpeta/documento.txt»);

System.out.println(fichero.exists());

}

}

Víctor Cuervo

emi

y cómo lo programo en el btn?

Víctor Cuervo

Gustavo

Hola buenas noches . Como tengo que hacer para guardar todo el contenido de un txt en una variable?

Víctor Cuervo

Alex

Tienes que crear una variable fuera del while e iterarla dentro del while

while ((sCadena = bf.readLine())!=null) {
System.out.println(sCadena);
archivoCompleto=archivoCompleto+sCadena;
}
System.out.println(archivoCompleto);
Ahora usted notará que todo el contenido se imprimirá en una sola línea.
Para ver la impresión como en el archivo tendrías que agregar un salto de línea.(\n) como la siguiente linea
archivoCompleto=archivoCompleto+sCadena+»\n»;

Si el texto es demasiado puede que no se guarde en una variable de tipo String, por lo que recomendó usar un Stringbuffer.

Saludos

Víctor Cuervo

Víctor Cuervo

Muy buena resolución @Alex. Gracias por tu aportación, se agradece.

Víctor Cuervo

Cleison

//Metodo para registrar los datos a un arcivo de texto
public void RegistrarAlumno(){
//siempre un try..catch
try {
//declaramos la variable pa PrinWriter
PrintWriter pw;
//declarando variable para guardar todos los datos y envie a pw
String linea;
//declarando para la clase
Alumno x;

//creando pw
pw=new PrintWriter(new FileWriter(«Alumnos.txt»));
//recorrido
for(int i=0;i<tamano();i++){
x=alu.get(i);
linea=x.getCodAlumno()+";"+
x.getNombres()+";"+
x.getApellidos()+";"+
x.getDni()+";"+
x.getEdad()+";"+
x.getCelular()+";"+
x.getEstadoString();
pw.println(linea);
}//for
pw.close();
} catch (Exception e) {

}
}

//Metodo para leer los datos del archivo de texto
public void ListarAlumnos(){
//try
try {
//declaramos una variable para br
BufferedReader br;
//declarando variables para recoger los datos
int codAlu;
String nom;
String ape;
String dni;
int edad;
int celu;
int estado;
String linea;
//declaramos un arreglo de tipo string
String[] s;

//crenado en br y fr
br=new BufferedReader(new FileReader("Alumnos.txt"));
while((linea=br.readLine())!=null){
s=linea.split(";");
codAlu=Integer.parseInt(s[0]);
nom=s[1];
ape=s[2];
dni=s[3];
edad=Integer.parseInt(s[4]);
celu=Integer.parseInt(s[5]);
estado=Integer.parseInt(s[6]);
//agregamos los datos de la variables al objeto array list
alu.add(new Alumno(codAlu, nom, ape, dni, edad, celu, estado));
}//while
br.close();
} catch (Exception e) {

}
}

Tengo ese codigo pero cuando ingreso los datos no solo guarda a 2 maximo y no se por que- ayudame por favor

Víctor Cuervo

Luis

Hola buenas tardes, tengo un problema con la lectura de archivos, dentro de mi carpeta que quiero que lea el programa tengo archivos con las sig caracteristicas:

archivo_0

archivo_1

archivo_2

archivo_3

.

.

archivo_10

lo que hace el programa es que del arhivo 0 se salta al 10 y despues ya hace el 2, 3 , 4.

Quisiera saber como es que java toma estos archivos y como es que los lee y porque se salta del 0 al 10  y una posible solución…

Víctor Cuervo

Víctor Cuervo

Luis,

A la hora de acceder a ellos lo hace de forma alfabética según su código ASCII, de ahí es secuencia.

Saludos.

Víctor Cuervo

jorge

disculpen la molestia,, necesito ayuda con un trabajo de programacion algo sencillo, el problema es que yo no tengo el conocimiento suficiente ,,,, es en java por favor,,,, dispuesto a dar una recompensa por su tiempo ! saludos ! [email protected]

Víctor Cuervo

marco

Exception in thread «main» java.lang.Error: Unresolved compilation problem:

at inicios.LeerFicheroTexto.main(LeerFicheroTexto.java:13)

me marca ese error

Víctor Cuervo

Leandro

Está muy bien explicado y mas claro no puede estar. Gracias. Pero resulta que el BufferedReader lee cada dos lineas! Tengo 6 lineas en un documento y me imprime la 2,4,6. y si pongo 5 lineas, la ultima linea sale null. Cual podría ser la solucion? Gracias

Víctor Cuervo

henry

excelente me ayudo en unerror que tenia muchas gracias, saludos desde colombia

Víctor Cuervo

yoshiorv

hola muy buena explicación, pero sabrás como leer las líneas del código sin leer los comentarios y los espacios en blanco, te lo agradecería, vuelvo a colocar mi correo gracias [email protected]

Víctor Cuervo

eskizo

la verdad es que todas las pequeñas dudas que tengo sobre java las estoy resolviendo en tu web, todo muy claro y conciso, gracias

Víctor Cuervo

JOSE

Amigo como hago para visualizar esa información en un jlabel de un JFrame de mi formulario trabajo en Netbeans.

Víctor Cuervo

yo

hola solo quisiera saber como hacer para leer solo la primera linea del archivo

Víctor Cuervo

Víctor Cuervo

@yo,

Lo puedes hacer quitando el bucle

En vez de poner:

while ((sCadena = bf.readLine())!=null) {
   System.out.println(sCadena);
}

Pones:

sCadena = bf.readLine();
System.out.println(sCadena);

Y ya lo tienes. Espero que te ayude.

Saludos. Víctor.

Víctor Cuervo

Run.EXE

Está perfecto. Muchas gracias por el pedacito de código :3

Víctor Cuervo

Adán

Genial! a la segunda conseguí que funcionara perfecto, muchísimas gracias por su trabajo desinteresado, desde España.

Víctor Cuervo

Víctor Cuervo

@Adán,

Me alegro que estas pocas líneas les hayan ayudado. :-D

Víctor Cuervo

Pedro

Gracias, esta muy bien el código. Aprovecho para deciros que he visto un canal muy interesante en YT con tutoriales de programación muy interesantes. Saludos.

Víctor Cuervo

Víctor Cuervo

@Pedro,

Muchas gracias. ¿Cual es el canal de Youtube que has visto?

Víctor Cuervo

Alex

Hola felicidades muy buen ejemplo, solo una pequeña observación.
En donde encapsulas la clase FileReader en una sola linea se te fue un ; de mas, quedando sin ese pequeño error, de la siguiente manera:
BufferedReader bf = new BufferedReader(new FileReader(«datos.txt»));

Víctor Cuervo

Víctor Cuervo

@Alex,

Cierto, solucionado el error tipográfico. :-D

Víctor Cuervo

Inexperto

Genial!!! Descargar el codigo y listo!!! :)

Víctor Cuervo

kalt28

una pregunta, tengo este problema:
Esta evaluación es relativamente sencilla, deberán investigar la estructura interna de un archivo de Word 2007 o superior.

Con esta información, hacer un programa que de un determinado documento de word (seleccionar cualquiera) por cada línea genere un archivo de texto, cuyo nombre sea el número de línea.

Para el siguiente ejemplo se considera el archivo de Word llamado MUESTRA.

Ejemplo:

Contenido

Nombre de archivo
01.txt Hola que tal:
02.txt Este es un ejemplo de separación de contenidos de un archivo Word
03.txt Cada línea forma un nuevo archivo de texto
04.txt El nombre del archivo es el número de línea

El archivo no debe de contener mas de 20 líneas, de lo contrario enviar un error «Demasiadas líneas».

xfa necesito ayuda

Víctor Cuervo

kalt28

esta muy bn explicado, solo que confundo el orden, mis felicitaciones

Víctor Cuervo

juan

Y si dentro del fichero tengo letras?, me las toma como null, no cambia de linea.

Víctor Cuervo

Víctor Cuervo

@juan,

Si tienes letras no pasa nada. Te lee las lineas perfectamente.
¿Estás teniendo algún problema con el código? Te podemos ayudar de alguna forma.

Saludos.

Víctor Cuervo

Rosa Ma Cabrera Valdiviezo

Gracias me ayudo mucho :D

Víctor Cuervo

Víctor Cuervo

@Rosa Ma Cabrera Valdiviezo,

Me alegro que te haya servido. :-D

Víctor Cuervo

Víctor Cuervo

Con el fin de ayudar un poco más… He incluido el código fuente java del ejemplo. De esta manera solo tendrán que compilarlo y ejecutarlo.

Espero les sea más fácil su comprensión.

Víctor Cuervo

javi

pues funciona de maravilla, menos quejarse y más practicar que es lo que tenéis que hacer, que las cosas no salen mirando la pantalla.

¿Algo que nos quieras comentar?

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

*