Para terminar este capítulo, el siguiente applet nos permite cargar, editar y grabar archivos ascii a elección. Podemos usar inclusive las acciones "cut & paste" del windows manager (Ctrl-C y Ctrl-V en Windows)!
Cargarlo con "appletviewer Ejemplo13" luego de haberlo compilado (o usar una página html desde un browser):
/*
Archivo: Ejemplo13.java
*/
import java.io.*;
import java.awt.*;
import java.applet.*;
public class Ejemplo13 extends Applet {
public void init() {
new Ventana13();
}
}
/*
Esta clase es la que en realidad hace el trabajo
*/
class Ventana13 extends Frame {
TextArea contenido;
Botones13 pieVentana;
Ventana13() {
super("Ejemplo de E/S");
contenido = new TextArea();
pieVentana = new Botones13();
add("North",contenido);
add("South",pieVentana);
pack();
show();
}
public boolean handleEvent(Event e) {
if ((e.idEvent.WINDOW_DESTROY)||(e.id
2004))
dispose();
if (e.id2004) CargarArchivo(pieVentana.toString());
if (e.id
2002) GrabarArchivo(pieVentana.toString());
return super.handleEvent(e);
}
void CargarArchivo(String nombre) {
FileInputStream fptr;
DataInputStream f;
String linea = null;
contenido.setText("");
try {
fptr = new FileInputStream(nombre);
f = new DataInputStream(fptr);
do {
linea = f.readLine();
if (linea!=null) contenido.appendText(linea+"\n");
} while (linea != null);
fptr.close();
}
catch (FileNotFoundException e) {
new Error13("El archivo no existe!");
}
catch (IOException e) {
new Error13("Error leyendo archivo!");
}
}
void GrabarArchivo(String nombre) {
FileOutputStream fptr;
DataOutputStream f;
try {
fptr = new FileOutputStream(nombre);
f = new DataOutputStream(fptr);
f.writeBytes(contenido.getText());
fptr.close();
}
catch (IOException e) {
new Error13("Error grabando archivo!");
}
}
}
/*
Esta es para los botones y el nombre del archivo
*/
class Botones13 extends Panel {
TextField fname;
Button cargar;
Button grabar;
Button cerrar;
Botones13() {
setLayout(new GridLayout(1,4));
fname = new TextField();
cargar = new Button("Cargar");
grabar = new Button("Grabar");
cerrar = new Button("Cerrar");
add(new Label("Archivo:"));
add(fname);
add(cargar);
add(grabar);
add(cerrar);
}
public boolean handleEvent(Event e) {
if ((e.idEvent.ACTION_EVENT)&&(e.target
cargar))
e.id=2004;
if ((e.idEvent.ACTION_EVENT)&&(e.target
grabar))
e.id=2002;
if ((e.idEvent.ACTION_EVENT)&&(e.target
cerrar))
e.id=2004;
return super.handleEvent(e);
}
public String toString() {
return fname.getText();
}
}
/*
Para mostrar los errores...
*/
class Error13 extends Frame {
Error13(String error) {
add("Center",new Label(error));
add("South", new Button("Ok"));
pack();
show();
}
public boolean handleEvent(Event e) {
dispose();
return super.handleEvent(e);
}
}
Un poco largo... pero vale la pena, ¿no?!
Nos vemos en el próximo capítulo...