# Datei schreiben über Applet



## sasono (3. Jan 2013)

Folgender Java-Code wird in meinem Applet ausgeführt, wenn ein Button betätigt wird:


```
URL url = new URL(getDocumentBase(),"test.txt");
URLConnection con = url.openConnection();
con.setDoOutput(true);
OutputStream stream = con.getOutputStream();
			    	
stream.write(new String("Das ist ein Test.").getBytes());
stream.close();
```

Mir wird kein Fehler angezeigt, die Datei wird aber nicht überschrieben. Mit googeln bin ich immer wieder auf Hinweise gestoßen, dass z. B. über JavaScript die Bytes, die ich schreiben will, entgegen genommen werden müssen, aber kein Beispiel gefunden, wie so etwas dann aussehen muss. Mein bisheriges HTML sieht so aus:


```
<applet archive="test.jar" code="Test.class" width="500" height="500" >
```


----------



## Schandro (4. Jan 2013)

Du musst dein Applet signieren und der User muss dem Applet 'vertrauen', ansonsten hast du nicht genügend Berechtigungen um auf die Festplatte zuzugreifen usw.

Wenn du die Java Konsole des Browsers geöffnet hättest hättest du übrigens die Fehlermeldung gesehen


----------



## sasono (4. Jan 2013)

Schandro hat gesagt.:


> Du musst dein Applet signieren und der User muss dem Applet 'vertrauen', ansonsten hast du nicht genügend Berechtigungen um auf die Festplatte zuzugreifen usw.


Die jar ist signiert und es wird auch entsprechend gefragt, ob ich dem Applet vertrauen will. Das Lesen (derselben) Datei funktioniert auch problemlos, nur beim Schreiben passiert nichts.



Schandro hat gesagt.:


> Wenn du die Java Konsole des Browsers geöffnet hättest hättest du übrigens die Fehlermeldung gesehen


Und wo kann ich das im Firefox machen? 

Da alle Schreib/Lese-Operationen in der try-catch-Umgebung geschehen, schreibe ich einen String im Applet, falls dort ein Fehler gefangen wird. Bei bisherigen Problemen mit dem Applet hat das zuverlässlich funktioniert, jetzt wird mir aber kein Fehler mehr angezeigt, die Datei wird trotzdem nicht geschrieben. Mit einer geöffneten Konsole im Browser wäre das ganze natürlich eleganter und vertrauenswürdiger.


----------



## Guest2 (4. Jan 2013)

Moin,



Schandro hat gesagt.:


> Du musst dein Applet signieren und der User muss dem Applet 'vertrauen', ansonsten hast du nicht genügend Berechtigungen um auf die Festplatte zuzugreifen usw.



seit Java 1.6.0_10 stimmt das so nicht. Über die JNLP API können Berechtigungen individuell und ohne Signatur eingeholt werden.  Hier ist ein Beispiel eines nicht signierten Applets, das lokale Dateien lesen und schreiben kann.




sasono hat gesagt.:


> ```
> URL url = new URL(getDocumentBase(),"test.txt");
> [..]
> ```



Soll die Datei lokal auf der Festplatte des Nutzers geschrieben werden oder auf dem Server? 

Viele Grüße
Fancy


----------



## sasono (4. Jan 2013)

Guest2 hat gesagt.:


> Soll die Datei lokal auf der Festplatte des Nutzers geschrieben werden oder auf dem Server?


Auf dem Server, die Datei liegt im selben Verzeichnis wie das Applet.


----------



## Guest2 (4. Jan 2013)

Das Applet läuft auf dem Rechner des Nutzers, von dort kannst Du nicht einfach auf dem Server "speichern", da muss der Server aktiv mitspielen. Du brauchst also auf dem Server etwas Aktives das die Daten entgegennimmt und verarbeitet. Das kann z.B. ein Java oder auch PHP Backend sein. Was Du konkret nutzen kannst, hängt von den Möglichkeiten Deines Hosters ab. 

Viele Grüße
Fancy


----------



## tröööt (4. Jan 2013)

wieder ein göttliches thema ...

mal so zur info : der server "spricht" HTTP ... ergo : du musst ihm auch in HTTP entgegenkommen ... wenn du also nur einfach den text den du speichern willst hinschickst versteht der server dich nicht und antwortet dir mit HTTP400 codes ... und trennt die verbindung ...

da es aber keine möglichkeit in java gibt das mitzubekommen war die operation erfolgreich und du bekommst keinen fehler ...

was ist also zu tun :

du brauchst auf dem server erstmal ein backend was die daten überhaupt richtig entgegen nimmt ... das kann auch ein servlet sein ...

und dann musst du noch einen gültigen HTTP-aufruf machen in dem du das servlet callst und die parameter übergibst ...


freunde ... sowas sind grundlagen der netzwerk-programmierung ... und steht so auch in jedem guten buch über das thema ... nur sollte man mal in der lage sein sowas auch zu lesen und zu verstehen


----------



## __Jbaqeth__ (4. Jan 2013)

@tröööt verpiss dich endlich aus diesem Forum. Niemand will dich hier.


----------



## tröööt (4. Jan 2013)

__Jbaqeth__ hat gesagt.:


> @tröööt verpiss dich endlich aus diesem Forum. Niemand will dich hier.



*grins*

joar ... nich so das ich das nich wüsste ... aber so ab und zu hilft es doch mal jemanden was ich so poste ...

btw : mal davon abgesehen das es keine mechanismen gibt mich 100% von diesem system zu trennen hast DU da eh keinen zugriff drauf


----------

