⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java10.htm

📁 E-books about Java Programing in Spanish
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML>
<HEAD>
<TITLE>Java desde Cero</TITLE>
</HEAD>
<BODY background=/iconos/1.gif  TEXT=000000 LINK=FF0000 VLINK=A62A2A>
 
<H1>Un par&eacute;ntesis de Entrada/Salida<BR>
</H1>
<P>
En Java hay muchas clases para leer y escribir archivos (u otros
dispositivos de E/S). Est&aacute;n reunidos en la biblioteca <B>java.io</B>.
<P>
Vamos a empezar como siempre con un peque&ntilde;o ejemplo funcional
y en seguida nos meteremos en el necesario camino de las excepciones...
<BR>
<H2>Primera Lectura<BR>
</H2>
<PRE>
<FONT SIZE=2>// archivo: Ejemplo9.java - compilar con &quot;javac Ejemplo9.java&quot;, etc. etc.
import java.io.*;

public class Ejemplo9 {
public static void main(String args[]) throws FileNotFoundException,IOException {
FileInputStream		fptr;
DataInputStream	f;
String			linea = null;
    
fptr = new FileInputStream(&quot;Ejemplo9.java&quot;);
f = new DataInputStream(fptr);
do {
linea = f.readLine();
if (linea!=null) System.out.println(linea);
} while (linea != null);
fptr.close();
}
}<BR>
</FONT>
</PRE>
<P>
(Caramba! &#191;Qu&eacute; hace ese <I>throws</I> ah&iacute;?)
<P>
El programa de ejemplo simplemente lee un archivo de texto y lo
muestra en pantalla, algo as&iacute; como el <FONT FACE="Arial">type</FONT>
del DOS o el <FONT FACE="Arial">cat</FONT> de Unix.
<P>
Dejemos por ahora el <FONT FACE="Arial">throws FileNotFoundException,IOException</FONT>
y vamos al c&oacute;digo.<BR>
<PRE>
<FONT SIZE=2>fptr = new FileInputStream(&quot;Ejemplo9.java&quot;);
<BR>
</FONT>
</PRE>
<P>
La clase <FONT FACE="Arial">FileInputStream</FONT> (descendiente
de InputStream) nos sirve para referirnos a archivos o conexiones
(sockets) de una m&aacute;quina. Podemos accederlos pasando un
String como aqu&iacute;, un objeto de tipo File o uno de tipo
FileDescriptor, pero en esencia es lo mismo. Al crear un objeto
de este tipo estamos &quot;abriendo&quot; un archivo, cl&aacute;sicamente
hablando.
<P>
Si el archivo no existe (por ejemplo reemplacen &quot;Ejemplo9.java&quot;
por alguna otra cosa, como &quot;noexiste.txt&quot;), al ejecutarlo
nos aparece un error:
<PRE>
<FONT SIZE=2>C:\java\curso&gt;java Ejemplo9
java.io.FileNotFoundException: noexiste.txt
        at java.io.FileInputStream.&lt;init&gt;(FileInputStream.java:51)
        at Ejemplo9.main(Ejemplo9.java:9)<BR>
</FONT>
</PRE>
<P>
(Caramba! &#191;D&oacute;nde vi ese FileNotFoudException antes?)
<P>
Justamente, cuando el archivo al que quiero acceder no existe,
Java &quot;lanza&quot; una <I>excepci&oacute;n</I>. Esto es, un
aviso de que algo fall&oacute; y, si no se toma ninguna acci&oacute;n,
detiene el programa.
<P>
La clase <FONT FACE="Arial">FileInputStream</FONT> puede &quot;lanzar&quot;
(throws) la excepci&oacute;n <FONT FACE="Arial">FileNotFoundException</FONT>.
<P>
&#191;C&oacute;mo capturar y tratar las excepciones? En seguida;
primero terminemos con nuestro programa.<BR>
<PRE>
<FONT SIZE=2>f = new DataInputStream(fptr);<BR>
</FONT>
</PRE>
<P>
La clase <FONT FACE="Arial">DataInputStream</FONT> nos permite
leer, en forma independiente del hardware, tipos de datos de una
&quot;corriente&quot; (stream) que, en este caso, es un archivo.
Es descendiente de <FONT FACE="Arial">FilterInputStream</FONT>
e <I>implementa</I> <FONT FACE="Arial">DataInput</FONT>, una <I>interface</I>.
<P>
Al crear un objeto de tipo <FONT FACE="Arial">DataInputStream</FONT>
lo referimos al archivo, que le pasamos como par&aacute;metro
(fptr); esta clase tiene toda una serie de m&eacute;todos para
leer datos en distintos formatos.
<P>
En nuestro programa usamos uno para leer l&iacute;neas, que devuelve
<I>null</I> cuando se llega al final del archivo o un <FONT FACE="Arial">String</FONT>
con el contenido de la l&iacute;nea:<BR>
<PRE>
<FONT SIZE=2>do {
<B>      linea = f.readLine();
</B>      System.out.println(linea);
} while (linea != null);<BR>
</FONT>
</PRE>
<P>
En seguida de leer la l&iacute;nea la imprimimos, y repetimos
esto mientras no nos devuelva <FONT FACE="Arial">null</FONT>.
<P>
Al final, cerramos el archivo:<BR>
<PRE>
<FONT SIZE=2>fptr.close();<BR>
</FONT>
</PRE>
<P>
Tanto <FONT FACE="Arial">readLine</FONT> como <FONT FACE="Arial">close</FONT>
pueden lanzar la excepci&oacute;n <FONT FACE="Arial">IOException</FONT>,
en caso de error de lectura o cierre de archivo.
<P>
En realidad, podr&iacute;amos no haber usado un DataInputStream
y trabajar en forma m&aacute;s directa:<BR>
<PRE>
<FONT SIZE=2>import java.io.*;

public class Ejemplo10 {
public static void main(String args[]) throws FileNotFoundException,IOException {
FileInputStream		fptr;
int			n;    

fptr = new FileInputStream(&quot;Ejemplo9.java&quot;);
do {
n = fptr.read();
if (n!=-1) System.out.print((char)n);
} while (n!=-1);
fptr.close();
}
}<BR>
</FONT>
</PRE>
<P>
Ya que la clase <FONT FACE="Arial">FileInputStream</FONT> tambi&eacute;n
dispone de m&eacute;todos para leer el archivo. S&oacute;lo que
son unos pocos m&eacute;todos que nos permiten leer un entero
por vez o un arreglo de bytes. <FONT FACE="Arial">DataInputStream</FONT>
tiene m&eacute;todos para leer los datos de muchas formas distintas,
y en general resulta m&aacute;s c&oacute;modo.<BR>
<H2>Capturando excepciones</H2>
<P>
Ahora s&iacute;, vamos a ver c&oacute;mo nos las arreglamos con
las excepciones para que no se nos pare el programa con un mensaje
tan poco est&eacute;tico...
<P>
En lugar de lanzar las excepciones al int&eacute;rprete, vamos
a procesarlas nosotros mediante la cl&aacute;usula <FONT FACE="Arial">catch</FONT>:
<BR>
<PRE>
<FONT SIZE=2>	// Archivo:	Ejemplo11.java
	// Compilar con:	javac Ejemplo11.java
<B>	// Ejecutar con:	java Ejemplo11 &lt;nombre_archivo&gt;
</B>import java.io.*;

public class Ejemplo11 {
<B>public static void main(String args[]) {
</B>FileInputStream		fptr;
DataInputStream	f;
String			linea = null;

<B>try {
fptr = new FileInputStream(args[0]);
</B>f = new DataInputStream(fptr);
do {
linea = f.readLine();
if (linea!=null) System.out.println(linea);
} while (linea != null);
fptr.close();
}
<B>catch (FileNotFoundException e) {
System.out.println(&quot;Hey, ese archivo no existe!\n&quot;);
}
catch (IOException e) { 
System.out.println(&quot;Error de E/S!\n&quot;);
}
</B>}
}<BR>
</FONT>
</PRE>
<P>
Tambi&eacute;n hicimos un cambio para elegir el archivo a imprimir
desde la l&iacute;nea de comandos, en lugar de entrarlo fijo,
utilizando para eso el argumento del m&eacute;todo <FONT FACE="Arial">main(arg[])</FONT>,
que consiste en una lista de <I>Strings</I> con los par&aacute;metros
que se pasan en la l&iacute;nea a continuaci&oacute;n de <FONT FACE="Arial">java
nombre_programa</FONT>. Por ejemplo, si llamamos a este programa
con:
<PRE>
<FONT SIZE=2>		java Ejemplo11 archi.txt otro.xxx<BR>
</FONT>
</PRE>
<P>
<FONT FACE="Arial">arg[0]</FONT> contendr&aacute; &quot;archi.txt&quot;,
 <FONT FACE="Arial">arg[1]</FONT> contendr&aacute; &quot;otro.xxx&quot;,
y as&iacute; sucesivamente.
<P>
Por supuesto, si llamamos a <FONT FACE="Arial">Ejemplo11</FONT>
sin par&aacute;metros se lanzar&aacute; otra excepci&oacute;n
al intentar accederlo:
<PRE>
<FONT SIZE=2>C:\java\curso&gt;java Ejemplo11
java.lang.ArrayIndexOutOfBoundsException: 0
        at Ejemplo11.main(Ejemplo11.java:10)<BR>
</FONT>
</PRE>
<P>
Pero tambi&eacute;n podr&iacute;amos capturarla!
<P>
Veamos un poquito c&oacute;mo es esto de capturar excepciones.
<P>
La cl&aacute;usula <B><FONT FACE="Arial">try</FONT></B> engloba
una parte del programa donde se pueden lanzar excepciones. Si
una excepci&oacute;n se produce, Java busca una instrucci&oacute;n
<B><FONT FACE="Arial">catch</FONT></B> <B><FONT FACE="Arial">(nombre_de_la_excepci&oacute;n
variable)</FONT></B>, y, si la encuentra, ejecuta lo que &eacute;sta
engloba. Si no encuentra un <FONT FACE="Arial">catch</FONT> para
esa excepci&oacute;n, para el programa y muestra el error que
se produjo.
<P>
Por ejemplo, para evitar este &uacute;ltimo error bastar&iacute;a
con agregar:<BR>
<PRE>
<FONT SIZE=2>catch (ArrayIndexOutOfBoundsException e) {
System.out.println(&quot;Debe ingresar un nombre de archivo!&quot;);
System.out.println(&quot;Ej.: java Ejemplo11 pepe.txt&quot;);
}<BR>
</FONT>
</PRE>
<P>
Hay que notar que cuando se lanza una excepci&oacute;n el programa
igual se detiene, porque el c&oacute;digo que sigue al lanzamiento
de la excepci&oacute;n no se ejecuta. Veremos luego c&oacute;mo
se comporta esto en un objeto que fue creado por otro, y c&oacute;mo
usar la instrucci&oacute;n <FONT FACE="Arial">finally</FONT> para
poner una parte de c&oacute;digo que se ejecute pase lo que pase.
<BR>
<H2>Los applets y los archivos</H2>
<P>
Veamos c&oacute;mo se comporta esta aplicaci&oacute;n si la modificamos
para usarla como applet.<BR>
<PRE>
<FONT SIZE=2>/*
// ----- Archivo:	Ejemplo12.java
*/

import java.io.*;
import java.awt.*;
import java.applet.*;

public class Ejemplo12 extends Applet {

public void init() {
		new Ventana12();
}
}

/*
// -------- Esta clase es la que en realidad hace el trabajo
*/

class Ventana12 extends Frame {

TextArea	contenido;
Button		cerrar;

Ventana12() {
super(&quot;Ejemplo de E/S&quot;);
contenido = new TextArea();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -