PDA

Visualizza la versione completa : [Java] Applet e file di testo: AccessControlException


royalsalerno
13-07-2005, 16:18
Salve,
ho creato un applet che deve leggere delle informazioni da un file di testo (creato con blocco note), ma quando la vado a provare mi dà errore lanciandomi una java.security.AccessConrolException: accesso negato al file.
Come posso fare?
Preciso che ho uno spazio su internet su cui devo far funzionare questo applet e che sia l'applet che il file di testo sono su questo spazio (nella stessa cartella).
Mi rendo conto che è un problema di sicurezza, ma il file è memorizzato assieme all'applet ed alla pagina html che li utilizza, quindi non si deve fare alcun accesso al file system locale di chi visita la pagina!
Per favore, aiutatemi!!!!
Grazie, ciao

Andrea1979
13-07-2005, 16:58
come stai provando ad accedere al testo!? posta il codice.

Per esempio, questo è un sistema che funziona:



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

public class readFileApplet extends Applet {

public TextArea showFile;

public void init() {
try {
InputStream in = (new URL(this.getCodeBase().toString() +
"/commands.txt")).openStream();
int c;
//String name ="";
byte[] b= new byte[in.available()];
in.read(b);
String name = new String(b);
showFile = new TextArea(name, 40, 40);
this.add(showFile);
showFile.setVisible(true);
}
catch (Exception e) {System.out.println(e.toString());
}
}
}

può non essere il massimo in quanto a prestazioni, però svolge il suo lavoro.

alka
13-07-2005, 17:01
Ho modificato il titolo della discussione aggiungendo il linguaggio di programmazione, che va sempre specificato come da Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=762409).

Ciao! :ciauz:

royalsalerno
13-07-2005, 19:01
Originariamente inviato da Andrea1979
come stai provando ad accedere al testo!? posta il codice.

Per esempio, questo è un sistema che funziona:



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

public class readFileApplet extends Applet {

public TextArea showFile;

public void init() {
try {
InputStream in = (new URL(this.getCodeBase().toString() +
"/commands.txt")).openStream();
int c;
//String name ="";
byte[] b= new byte[in.available()];
in.read(b);
String name = new String(b);
showFile = new TextArea(name, 40, 40);
this.add(showFile);
showFile.setVisible(true);
}
catch (Exception e) {System.out.println(e.toString());
}
}
}

può non essere il massimo in quanto a prestazioni, però svolge il suo lavoro.

Grazie 1000, il tuo codice va più che bene! Già che ci sono, mica è possibile anche creare e aprire un file in scrittura? Mi andrebbe bene anche solo per uso locale (senza connessione a internet, ma sempre mediante applet). Ho provato con un FileOutputStream, ma anche così mi dà errore di accesso negato.
Ciao e grazie ancora!


P.S. Per Alka
Grazie per la segnalazione, d'ora in poi preciserò sempre il linguaggio di programmazione.
Ciao

LeleFT
14-07-2005, 09:17
Attenzione: il codice postato da Andrea funziona, ma se l'applet deve essere messa on-line ed eseguita da un client remoto (praticamente, se l'applet è su internet) il file deve trovarsi nella stessa cartella dell'applet sul server da cui viene scaricata.

Non è possibile in ogni caso accedere al FileSystem del client che esegue l'applet a meno che l'applet stessa non sia certificata.

Per la scrittura è ancora più complesso: finchè si tratta di eseguire l'applet in locale non ci sono grossi problemi, ma se devi metterla su internet è diverso. Devi assicurarti di avere i permessi di scrittura sul server da cui viene scaricata l'applet (ed in genere i programmi non hanno tale proprietà).


Ciao. :ciauz:

Andrea1979
14-07-2005, 10:19
Esatto. Grazie Lele per le precisiazioni: Il/I file che un applet può leggere deve/ono risiedere nella stessa cartella ( :confused: e nelle eventuali sottocartelle :master: ) in cui risiede l'applet stessa.

Se il server non è tuo o non ci puoi mettere mano, scordati di scriverci niente via applet. Per altri problemi di lettura/scrittura sul client fa riferimento alle signed applet, a proposito delle quali puoi leggere sul sito della sun *e cercare su questo forum*

royalsalerno
14-07-2005, 17:21
Ancora grazie a tutti.
In effetti, col codice postato ho risolto (il file di testo risiede nella stessa cartella dell'applet), ma se voglio creare un applet che scrive in un file di testo, come posso fare?
Mi serve per un utilizzo in locale: sia l'applet che il file devono risiedere nella stessa cartella di un computer non connesso a internet.
Ciao

LeleFT
14-07-2005, 17:35
In questo caso non ci sono problemi:


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

public class readFileApplet extends Applet {

public TextArea showFile;

public void init() {
try {
FileOnputStream out = (new URL(this.getCodeBase().toString() +
"/fileOut.txt")).openStream();
PrintStream ps = new PrintStream( out );
ps.println("Questo testo sarà scritto nel file");
ps.close();
}
catch (Exception e) {System.out.println(e.toString());
}
}
}
Ciao. :ciauz:

royalsalerno
14-07-2005, 18:20
Grazie mille.
Ancora una volta mi avete aiutato!
Questo forum è grandioso!!!!
Ciao

royalsalerno
18-07-2005, 13:37
Originariamente inviato da LeleFT
In questo caso non ci sono problemi:


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

public class readFileApplet extends Applet {

public TextArea showFile;

public void init() {
try {
FileOnputStream out = (new URL(this.getCodeBase().toString() +
"/fileOut.txt")).openStream();
PrintStream ps = new PrintStream( out );
ps.println("Questo testo sarà scritto nel file");
ps.close();
}
catch (Exception e) {System.out.println(e.toString());
}
}
}

Ho provato il tuo codice ma mi dà errore: la classe FileOnput non la riconosce! Ho provato con la classe FileOutput, ma è incompatibile col tipo restituito dal metodo openStream().
Come posso fare?

Loading