Newsgroup: it.comp.java
Titolo: Vorrei che un Applet scrivesse su un file...

Vorrei creare un'Applet che legga e scriva da un file di testo contenuto
nella stessa sottodyrectory da cui è scaricata. Ho controllato sul
Tutorial della Sun e pare sia possibile pur di ridefinire i metodi
checkRead e checkWrite del SecurityManager... quasi sicuramente mi
sbaglio, se è così mi piacerebbe che qualcuno di voi mi disilludesse
definitivamente!
Grazie
PS: Se potete rispondetemi anche in E-mail!!!!
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
import java.awt.*;
import java.applet.*;
import java.io.*;
class MySecurityManager extends SecurityManager {
  MySecurityManager() {
    super();
  }
 
  public void checkRead(FileDescriptor filedescriptor) {
    if (false)
      throw new SecurityException("");
  } 
  public void checkRead(String filename) {
    if (false)
      throw new SecurityException("");
  }
  public void checkRead(String filename, Object executionContext) {
    if (false)
      throw new SecurityException("");
  }
  public void checkWrite(FileDescriptor filedescriptor) {
    if (false)
      throw new SecurityException("");
  }
  public void checkWrite(String filename) {
    if (false)
      throw new SecurityException("");
  }    
}
public class MyGuestBook extends Applet {
  void button1_Clicked(Event event) {
    try {
      RandomAccessFile f = new RandomAccessFile ("file.txt", "rw");
      f.seek (f.length());
      f.writeBytes ("Paolo Castagna");
      f.writeByte (13);
      f.writeByte (10);
      f.close(); 
   } catch (IOException e) {}
  }
  public void init() {
    super.init();
      try {
        System.setSecurityManager(new MySecurityManager());
      } catch (SecurityException se) {
        System.out.println("SecurityManager already set!");
      }
    //{{INIT_CONTROLS
    setLayout(null);
    addNotify();
    resize(426,266);
    button1 = new java.awt.Button("Salva");
    button1.reshape(12,48,144,24);
    add(button1);
    textField1 = new java.awt.TextField();
    textField1.reshape(12,12,245,24);
    add(textField1);
    //}}
  }
  public boolean handleEvent(Event event) {
    if (event.target == button1 && 
event.id
 == Event.ACTION_EVENT) {
	button1_Clicked(event);
      return true;
    }
    return super.handleEvent(event);
  }
	//{{DECLARE_CONTROLS
	java.awt.Button button1;
	java.awt.TextField textField1;
	//}}
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
________________________________________________
 Paolo Castagna,
 
http://www.freeweb.org/letteratura/CastaWorld


 Con un'Applet modificare il SecurityManager significa farlo a quello del Browser
e lo dovrebbero fare tutti coloro che vogliono caricarsi l'applet.
La soluzione che ho utilizzato io consiste nello scrivere delle classi remote
(utilizzabili mediante l'RMI) che eseguono le operazioni di base per la
lettura/scrittura di un file, poi una volta eseguito l'hangup, ai metodi mediante
l'RMI, dall'Applet è semplicissimo eseguire qualsiasi operazione sul disco del
server; se poi sei intenzionato al trasferimento di tale file sul client te lo
spiegherò nella prossima puntata.
Attenzione alla possibilità che due client condividano lo stesso oggetto... e
tutto quello che ne consegue. Io preferisco di implementare la tecnica del
Factoring.
Ciao.
                                              Carlo Di Benedetto