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.
Auch wenn die Dokumentation es nicht wirklich klar herausstellt: es gibt zwei Arten von Dateien:
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 Länge können auf dem internen Speicher direkt angelegt, gelesen und gelöscht werden:
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)const Storage = require('Storage');
let readText = Storage.read('4testing');
const Storage = require('Storage');
Storage.erase('4testing');
Einen kompletten CRUD-Zyklus zeigt folgendes Skript:
auf Uhr ausführenOb 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');
}
Da die Leseoperation nur einen Zeiger auf den Dateiinhalt kopiert (und nicht den Inhalt selbst), ist dieses Vorgehen auch sehr effizient.
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');
}
Da die Leseoperation nur einen Zeiger auf den Dateiinhalt kopiert (und nicht den Inhalt selbst), ist dieses Vorgehen sehr effizient.
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.
const Storage = require('Storage');
const maxSize = 1024;
Storage.write('4testing','initial content',0,maxSize);
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ührenDateien 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.
const Storage = require('Storage');
let File = Storage.open('4testing','r');
const NumberOfCharsToRead = 4;
let firstReadText = File.read(NumberOfCharsToRead);
let moreReadText = File.read(NumberOfCharsToRead);
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');
const Storage = require('Storage');
let File = Storage.open('4testing','a');
File.write('\ntext to be written after the end of an existing file');
Das folgende Skript enthält ein ausführlicheres Beispiel:
auf Uhr ausführenUm 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;
}