Entrada/salida |
Lectura de un archivo de texto
archivo2:
ArchivoApp2.java
El proceso de lectura de un archivo de texto es similar a la lectura desde el dispositivo estándar. Creamos un objeto entrada de la clase FileReader en vez de InputStreamReader. El final del archivo viene dado cuando la función read devuelve -1. El resto del código es similar.
FileReader entrada=null;
StringBuffer str=new StringBuffer();
try {
entrada=new FileReader("ArchivoApp2.java");
int c;
while((c=entrada.read())!=-1){
str.append((char)c);
}
}catch (IOException ex) {}
Para mostrar el archivo de texto en la pantalla del monitor, se imprime el contenido del objeto str de la clase StringBuffer.
System.out.println(str);
Una vez concluído el proceso de lectura, es conveniente cerrar el flujo de datos, esto se realiza en una claúsula finally que siempre se llama independientemente de que se produzcan o no errores en el proceso de lectura/escritura.
}finally{
if(entrada!=null){
try{
entrada.close();
}catch(IOException ex){}
}
}
El código completo de este ejemplo es el siguiente:
public class ArchivoApp2 {
public static void main(String[] args) {
FileReader entrada=null;
StringBuffer str=new StringBuffer();
try {
entrada=new FileReader("ArchivoApp2.java");
int c;
while((c=entrada.read())!=-1){
str.append((char)c);
}
System.out.println(str);
System.out.println("--------------------------------------");
}catch (IOException ex) {
System.out.println(ex);
}finally{
//cerrar los flujos de datos
if(entrada!=null){
try{
entrada.close();
}catch(IOException ex){}
}
System.out.println("el bloque finally siempre se ejecuta");
}
}
}
|
archivo3:
ArchivoApp3.java
Los pasos para leer y escribir en disco son los siguientes:
entrada=new FileReader("ArchivoApp3.java");
salida=new FileWriter("copia.java");
while((c=entrada.read())!=-1){
salida.write(c);
}
entrada.close();
salida.close();
El código completo de este ejemplo que crea un archivo copia del original, es el siguiente
import java.io.*;
public class ArchivoApp3 {
public static void main(String[] args) {
FileReader entrada=null;
FileWriter salida=null;
try {
entrada=new FileReader("ArchivoApp3.java");
salida=new FileWriter("copia.java");
int c;
while((c=entrada.read())!=-1){
salida.write(c);
}
}catch (IOException ex) {
System.out.println(ex);
}finally{
//cerrar los flujos de datos
if(entrada!=null){
try{
entrada.close();
}catch(IOException ex){}
}
if(salida!=null){
try{
salida.close();
}catch(IOException ex){}
}
System.out.println("el bloque finally siempre se ejecuta");
}
}
}
|
Cuando se trate de leer y escribir datos binarios se sustituye FileReader por FileInputStream y FileWriter por FileOutputStream. De hecho, si se realiza esta sustitución en el código fuente de este ejemplo, los resultados no cambian.