Andreas Rozek
[ Impressum ]   [ Datenschutzerklärung ]   [ Kontakt ]   [ ]

Datei-Operationen

Bangle.js Datei-Operationen

Die Dateien auf einer Bangle.js können von JavaScript aus angelegt, gelesen, überschrieben und wieder gelöscht werden.

Das interne Dateisystem wird vom Emulator derzeit nicht unterstützt.

Nota bene:

Auch wenn die Dokumentation es nicht wirklich klar herausstellt: es gibt zwei Arten von Dateien:

  • Dateien fester Größe und
  • erweiterbare Dateien variabler Größe.

Beide Datei-Arten werden unterschiedlich gehandhabt, und die jeweils eingesetzten Methoden dürfen nicht gemischt werden!

Folglich steht vor der Programmierung immer erst die Entscheidung, welche der beiden Datei-Arten verwendet werden soll.

Hier ein Überblick über die unterschiedlichen Eigenschaften:

  • Dateien fester Größe
    • unterstützen binäre Inhalte,
    • müssen mit der max. erwarteten Zielgröße angelegt werden,
    • unterstützen das Schreiben von Daten an beliebiger Stelle innerhalb dieser Datei,
    • können aber (bislang) nur in Gänze gelesen werden.
  • Dateien variabler Größe
    • unterstützen keine(!) binären Daten (Bytes mit dem Wert 0xFF haben eine interne Bedeutung),
    • werden anfangs zum Lesen, Schreiben oder Erweitern geöffnet - ein Öffnen zum Schreiben legt die Datei neu an,
    • können nur sequentiell gelesen und geschrieben werden,
    • lassen sich aber auch in Teilen lesen oder schreiben,
    • es kann immer nur an das Ende einer Datei angehängt werden, das Kürzen einer Datei ist nicht möglich.

Dateien fester Länge

Datei fester Länge anlegen/lesen/schreiben/löschen

Dateien fester Länge können auf dem internen Speicher direkt angelegt, gelesen und gelöscht werden:

  • Datei anlegen
    const Storage = require('Storage');
    Storage.write('4testing','file content');
    die erste Schreiboperation legt zugleich die (unveränderliche) Länge der Datei fest (siehe weiter unten)
  • Datei lesen
    const Storage = require('Storage');
    let readText = Storage.read('4testing');
  • Datei löschen
    const Storage = require('Storage');
    Storage.erase('4testing');

Einen kompletten CRUD-Zyklus zeigt folgendes Skript:

auf Uhr ausführen

Prüfen, ob eine Datei fester Länge existiert

Ob eine Datei fester Länge existiert, kann man auch durch probeweises Lesen erkennen:

const Storage = require('Storage');

if (Storage.read('4testing') == null ) {
print('File does not exist');
} else {
print('File exists');
}

auf Uhr ausführen

Da die Leseoperation nur einen Zeiger auf den Dateiinhalt kopiert (und nicht den Inhalt selbst), ist dieses Vorgehen auch sehr effizient.

Länge einer Datei fester Länge bestimmen

Sofern die Datei existiert, erhält man ihre Länge durch

const Storage = require('Storage');
print('File contains ' + Storage.read('4testing').length + ' bytes');

Mit der Methode zur Präsenzprüfung kombiniert ergibt sich z.B.

const Storage = require('Storage');

let readText = Storage.read('4testing');
if (readText == null ) {
print('File does not exist');
} else {
print('File contains ' + Storage.read('4testing').length + ' bytes');
}

auf Uhr ausführen

Da die Leseoperation nur einen Zeiger auf den Dateiinhalt kopiert (und nicht den Inhalt selbst), ist dieses Vorgehen sehr effizient.

Selektives Überschreiben von Dateien fester Länge

Eine Datei fester Länge kann direkt selektiv überschrieben werden, d.h. es lassen sich gezielt Teile der Datei "in-situ" verändern, ohne dass sie dafür komplett neu erstellt werden muss.

Eine Verlängerung der Datei ist auf diese Weise nicht möglich - plant man, später weiteren Inhalt hinzuzufügen, muss die geplante max. Dateigröße beim erstmaligen Erstellen (oder vollständigen Überschreiben) der Datei mit angegeben werden.

  • Anlegen einer Datei mit vorgegebener Zielgröße
    const Storage = require('Storage');
    const maxSize = 1024;
    Storage.write('4testing','initial content',0,maxSize);
  • selektives Überschreiben einer Datei
    const Storage = require('Storage');
    const Offset = 15;
    Storage.write('4testing',' may be extended later',Offset);

Das folgende Skript enthält ein ausführlicheres Beispiel:

auf Uhr ausführen

Dateien variabler Länge

Datei variabler Länge öffnen und lesen/schreiben/erweitern

Dateien variabler Länge müssen zunächst in einem der Modi "lesen", "schreiben" oder "erweitern" geöffnet und können anschließend mit den zum gewählten Modus passenden Methoden bearbeitet werden.

  • Datei öffnen und lesen
    const Storage = require('Storage');
    let File = Storage.open('4testing','r');
    const NumberOfCharsToRead = 4;
    let firstReadText = File.read(NumberOfCharsToRead);
    let moreReadText = File.read(NumberOfCharsToRead);
  • Datei öffnen und (von Anfang an) überschreiben
    const Storage = require('Storage');
    let File = Storage.open('4testing','w');
    File.write('text to write - starting at the beginning\n');
    File.write('text to be written after the first one');
  • Datei öffnen und erweitern
    const Storage = require('Storage');
    let File = Storage.open('4testing','a');
    File.write('\ntext to be written after the end of an existing file');
Nota bene: aufgrund der Art, wie das Ende einer Datei erkannt wird, dürfen keine Zeichen mit dem Code 255 geschrieben werden! Dies bedeutet aber auch, dass Binärdateien auf diese Weise nicht bearbeitet werden können!

Das folgende Skript enthält ein ausführlicheres Beispiel:

auf Uhr ausführen

Länge einer Datei variabler Länge bestimmen

Um die Länge einer Datei variabler Länge zu bestimmen, muss sie von Anfang bis Ende gelesen werden:

  function SizeOfFile (FileName) {
let File = Storage.open(FileName,'r');
let Size = 0;
for (;;) {
let readChar = File.read(1);
if (readChar == null) { break } else { Size++ }
}
return Size;
}