Adobe Air (wiwobooks.com Release)
schreibt einen 32-Bit-Ganzzahlwert ohne Vorzeichen value
Tabelle 12.6 Instanzmethoden der FileStream-Klasse zum Schreiben von Daten
Methode
writeUTF(value:String)
writeUTFBytes(value:String)
Erläuterung
schreibt eine UTF-8-Zeichenkette value , eingeleitet von einem UTF-Header
schreibt eine UTF-8-Zeichenkette value
Tabelle 12.6 Instanzmethoden der FileStream-Klasse zum Schreiben von Daten (Forts.)
Die Ausnahme von dieser Regel bildet writeBytes(): Diese Methode stellt gewissermaßen die Funktionalität zum Speichern von »Rohdaten« zur Verfügung und verfügt daher mit offset und length über Parameter, die es erlauben, einen bestimmten Abschnitt aus einem ByteArray in die Datei zu schreiben.
Lösungsweg
1. Öffnen einer FileStream -Instanz für synchronen oder asynchronen Zugriff mit fileMode -Parameter
FileMode.WRITE
Schreibzugriff (Dateiinhalt ersetzen)
FileMode.APPEND
Schreibzugriff (an Dateiinhalt anhängen)
FileMode.UPDATE
Lese- und Schreibzugriff (Dateiinhalt aktualisieren)
2. Bei asynchron geöffneter Datei: Registrieren von Ereignis-Listenern für Erfolgs- und Fehlerereignisse
3. Quelltext zur Vor- und Aufbereitung der Daten
4. Aufruf einer der write…() -Methoden (oder mehrerer in Folge) zum Schreiben von Daten
5. Schließen der FileStream -Instanz mithilfe ihrer close() -Methode
Stolperfallen/Caveats
Seien Sie sich bewusst, dass im Modus FileMode.WRITE eine etwa vorhandene Datei gelöscht wird, auch wenn Sie keine write…() -Methode aufrufen. Sie können dieser Problematik entgehen, wenn Sie Schreibzugriffe in Ihrer Anwendung z. B. nur zulassen, wenn die Datei entweder nicht vorhanden ist oder vorher geöffnet wurde. Oder aber Sie verwenden den Modus FileMode.UPDATE , um die Datei ohne Sorge um bestehenden Inhalt »auf Verdacht« zum Schreibzugriff öffnen zu können. Sehen Sie hierzu den nachfolgenden Abschnitt 12.4.6.
So geht es
Das nachfolgende Beispiel zeigt die Verwendung der Methode writeMultiByte() , um einen Text in eine Datei zu schreiben:
import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
import flash.errors.IOError;
var myFile:File = File.applicationStorageDirectory; myFile = myFile.resolvePath("someDir/nochEinBeispiel.txt"); var myFileStream:FileStream = new FileStream();
try {
myFileStream.open(myFile, FileMode.WRITE);
// Zeichenkette im Zeichensatz ISO 8859-15 (westeuropäisch) // schreiben
myFileStream.writeMultiByte("Test-Text", "iso-8859-15"); myFileStream.close();
}
catch(e:IOError) {
trace("Es gab einen Fehler beim Zugriff auf " + myFile.nativePath + " :\n" + e.message);
}
Listing 12.5 Beispiel: Daten in Datei schreiben
Weitergehende Informationen
Lesen Sie mehr über die write…() -Methoden in der Online-Dokumentation unter: http://livedocs.adobe.com/flex/3/langref/flash/filesystem/FileStream.html
12.4.6 Inhalt in Datei aktualisieren
Wenn Sie beim Öffnen der Datei mithilfe einer FileStream -Instanz für den fileMode -Parameter den Wert FileMode.UPDATE wählen, können Sie sowohl lesend als auch schreibend auf die Datei zugreifen. Das Besondere daran: Wenn Sie eine Datei aktualisieren, bedeutet das, dass in der Datei tatsächlich nur die Zeichen an der aktuellen Position überschrieben werden, der Rest jedoch erhalten bleibt. Nehmen Sie einmal das folgende Quelltextsegment:
import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
// Initialisierung von myFile und myFileStream (nicht gezeigt) myFileStream.open(myFile, FileMode.WRITE);
myFileStream.writeMultiByte("Wahnsinn! Ein Test-Text!", "utf-8"); myFileStream.close();
Die daraus resultierende Datei wird folgenden Text enthalten: Wahnsinn! Ein Test-Text
Dann öffnen Sie die gleiche Datei mit einem Quelltext wie dem folgenden, diesmal im Aktualisierungsmodus, setzen den Zeiger auf die zweite Position und schreiben in die Datei:
import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
// Initialisierung von myFile und myFileStream (nicht gezeigt) myFileStream.open(myFile, FileMode.UPDATE);
myFileStream.position = 1;
myFileStream.writeMultiByte("00tw00t", "utf-8");
myFileStream.close();
Anschließend wird die Datei Folgendes enthalten:
W00tw00t! Ein Test-Text!
Ist FileMode.UPDATE überhaupt notwendig?
Über die Frage, ob es sinnhaft ist, den Modus FileMode.UPDATE zu verwenden, kann man sicherlich streiten. Wenn Sie relativ wenig Quelltext haben, kann es einfacher sein, die
Weitere Kostenlose Bücher