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

📄 java10.htm

📁 E-books about Java Programing in Spanish
💻 HTM
📖 第 1 页 / 共 2 页
字号:
cerrar = new Button("Cerrar");    
CargarArchivo();
add("North",contenido);
add("South",cerrar);
pack();
show();
}

public boolean handleEvent(Event e) {
if ((e.id==Event.WINDOW_DESTROY)||(e.target==cerrar))
dispose();
return super.handleEvent(e);
}

void CargarArchivo() {
FileInputStream		fptr;
DataInputStream	f;
String			linea = null;
try {
fptr = new FileInputStream("Ejemplo12.java");
f = new DataInputStream(fptr);
do {
linea = f.readLine();
if (linea!=null)
contenido.appendText(linea+"\n");
} while (linea != null);
fptr.close();
}
catch (FileNotFoundException e) {
contenido.appendText("Hey, ese archivo no existe!\n");
}
catch (IOException e) { 
contenido.appendText("Error de E/S!\n");
}
}
}<BR>
</FONT>
</PRE>
<P>
Lo cargamos desde la p&aacute;gina Ejemplo12.html:
<PRE>
<FONT SIZE=2>&lt;HTML&gt;
&lt;HEAD&gt;
&lt;TITLE&gt;Ejemplo 12 - Ejemplo con archivo&lt;/TITLE&gt;
&lt;/HEAD&gt;
&lt;BODY&gt;
&lt;applet code=&quot;Ejemplo12.class&quot; width=170 height=150&gt;
&lt;/applet&gt;
&lt;/BODY&gt;
&lt;/HTML&gt;<BR>
</FONT>
</PRE>
<P>
Mientras corramos esto en la misma m&aacute;quina, no hay problema
(anda muy bien!). Pero qu&eacute; pasa si intentamos cargarlo
desde la red? Para los que no tengan server html puse una copia
en:
<P>
http://www.amarillas.com/rock/java/Ejemplo12.htm<BR>
<P>
El archivo no aparece! En su lugar se produce una excepci&oacute;n;
en la l&iacute;nea de estado del Microsoft Internet Explorer,
por ejemplo, se lee:
<PRE>
<FONT SIZE=2>exception: com.ms.applet.AppletSecurityException: security.file.read: Ejemplo12.java
<BR>
</FONT>
</PRE>
<P>
Esto es debido a una restricci&oacute;n de seguridad de Java:
NO SE PUEDEN CARGAR ARCHIVOS QUE ESTEN EN UNA MAQUINA DISTINTA
A AQUELLA DESDE LA CUAL SE CARGO EL APPLET. El applet se corre
en el cliente,  e intenta acceder a un archivo local. Eso es lo
que provoca la excepci&oacute;n (que, por supuesto, puede detectarse
con un <FONT FACE="Arial">catch</FONT> y tratarse...)<BR>
<P>
Por cuestiones de seguridad, los applets son m&aacute;s limitados
que las aplicaciones Java locales. Las pol&iacute;ticas de seguridad
las manejan los browsers (no Java), y generalmente los l&iacute;mites
que se imponen a los applets son:
<UL>
<LI>Un applet no puede cargar bibliotecas (libraries) ni definir
m&eacute;todos nativos
<LI>No puede leer o escribir normalmente archivos en el cliente
que lo carga desde otro server
<LI>No puede establecer conexiones de red, salvo al servidor del
que proviene
<LI>No puede arrancar programas en la m&aacute;quina donde se
est&aacute; ejecutando
<LI>No puede leer ciertas propiedades del sistema
<LI>En las ventanas de los applets se indica que se trata de un
applet
</UL>
<P>
<P>
Sin embargo, pueden:
<UL>
<LI>Reproducir sonidos
<LI>Pueden establecer conexiones con el servidor del que provienen
<LI>Pueden llamar f&aacute;cilmente p&aacute;ginas HTML desde
el browser
<LI>Pueden invocar m&eacute;todos p&uacute;blicos de otros applets
de la misma p&aacute;gina
<LI>Si se cargan desde la propia m&aacute;quina (localmente) no
tienen ninguna de las restricciones anteriores
<LI>Pueden seguir corriendo aunque se cambie de p&aacute;gina
en el browser
</UL>
<P>
<P>
En realidad, la especificaci&oacute;n de Java permite que los
applets lean archivos en otras m&aacute;quinas dando la URL completa;
sin embargo, los browsers no lo permiten. Veremos m&aacute;s adelante
c&oacute;mo intercambiar datos entre m&aacute;quinas para poder
ver un archivo del server, por ejemplo.<BR>
<H2>Nuestro modesto &quot;Editor&quot;</H2>
<P>
Para terminar este cap&iacute;tulo, el siguiente applet nos permite
cargar, editar y grabar archivos ascii a elecci&oacute;n. Podemos
usar inclusive las acciones &quot;cut &amp; paste&quot; del windows
manager (Ctrl-C y Ctrl-V en Windows)!
<P>
Cargarlo con &quot;<FONT FACE="Arial">appletviewer Ejemplo13</FONT>&quot;
luego de haberlo compilado (o usar una p&aacute;gina html desde
un browser):
<P>
 <BR>
<PRE>
<FONT SIZE=2>/*
// ----- 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(&quot;Ejemplo de E/S&quot;);
    contenido = new TextArea();
    pieVentana = new Botones13();    
    add(&quot;North&quot;,contenido);
    add(&quot;South&quot;,pieVentana);
    pack();
    show();
  }

  public boolean handleEvent(Event e) {
    if ((e.id==Event.WINDOW_DESTROY)||(e.id==2003))
       dispose();
    if (e.id==2001) 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(&quot;&quot;);
    try {
      fptr = new FileInputStream(nombre);
      f = new DataInputStream(fptr);
      do {
        linea = f.readLine();
        if (linea!=null) contenido.appendText(linea+&quot;\n&quot;);
      } while (linea != null);
      fptr.close();
    }
    catch (FileNotFoundException e) {
	new Error13(&quot;El archivo no existe!&quot;);
    }
    catch (IOException e) { 
	new Error13(&quot;Error leyendo archivo!&quot;);
    }
  }

  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(&quot;Error grabando archivo!&quot;);
    }
  }
}

/*
// -------- 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(&quot;Cargar&quot;);
    grabar = new Button(&quot;Grabar&quot;);
    cerrar = new Button(&quot;Cerrar&quot;);
    add(new Label(&quot;Archivo:&quot;));
    add(fname);
    add(cargar);
    add(grabar);
    add(cerrar);
  }

  public boolean handleEvent(Event e) {
    if ((e.id==Event.ACTION_EVENT)&amp;&amp;(e.target==cargar))
	e.id=2001;
    if ((e.id==Event.ACTION_EVENT)&amp;&amp;(e.target==grabar))
	e.id=2002;
    if ((e.id==Event.ACTION_EVENT)&amp;&amp;(e.target==cerrar))
	e.id=2003;
    return super.handleEvent(e);
  }

  public String toString() {
    return fname.getText();
  }
}

/*
// ------- Para mostrar los errores...
*/

class Error13 extends Frame {
  
  Error13(String error) {
	add(&quot;Center&quot;,new Label(error));
	add(&quot;South&quot;, new Button(&quot;Ok&quot;));
	pack();
	show();
  }

  public boolean handleEvent(Event e) {
    dispose();
    return super.handleEvent(e);
  }
}<BR>
<BR>
</FONT>
</PRE>
<P>
Un poco largo... pero vale la pena, &#191;no?!
<P>
Nos vemos en el pr&oacute;ximo cap&iacute;tulo...<BR>
<BR>
<BR>
<P>
Jorge Bourdette
<P>
<A HREF=mailto:jpb@amarillas.com>jpb@amarillas.com</A>
</BODY>
</HTML>

⌨️ 快捷键说明

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