Az Io programozási nyelvben a fájlkezelés támogatására és használatára vezették be a File nevű objektumot, ami megvalósítja az összes fontosabb műveletet. Az előbbi mellett szintén bevezetésre került a Directory nevű objektum, amivel a könyvtárstruktúrát tudjuk bejárni és manipulálni.
A Directory objektummal férhetünk hozzá a fájlrendszer könyvtáraihoz. Az elérési utak kezelése az Unix világból megszokott módon történik. Az elérési útvonal „/” jellel kezdődik, akkor az a gyökér könyvtárat jelöli, míg ha „./” jelekkel kezdődik, akkor a program hívási helyének felel meg. Nem jelöljük külön, akkor automatikusan „./” jeleket használja fel.
A directories
függvény az elérési útvonalon található könyvtárakat listázza ki, a hívó egy listát kap vissza.
Egy könyvtárban jelenlévő fájlokat a files
függvénnyel kérdezhetjük le, szintén egy listával tér vissza, amiben File objektumok találhatóak.
Az exists(optionalPath)
függvénnyel azt vizsgálhatjuk, hogy a megadott opcionális útvonalon létezik-e könyvtár.
Könyvtárak között a setPath(path)
függvénnyel navigálhatunk. A jelenlegi helyzetünket a könyvtár struktúrában a path
függvénnyel kérdezhetjük le.
A create
függvénnyel könyvtárakat hozhatunk létre, ha még nem léteznek. Önmagával tér vissza sikeres létrehozás esetén vagy ha a könyvtár már létezik. Hiba esetén nil
értéket ad vissza. Törölni könyvtárakat a remove
függvény segítségével tudunk. Könyvtárakat a moveTo(path)
függvénysegítségével tudunk mozgatni.
A könyvtárban található elemek számát a size függvénnyel kérdezhetjük le. Eddig csak olyan függvényt említettünk meg, ami külön külön adta vissza a könyvtár elemeit aszerint, hogy könyvtár-e vagy fájl-e. Az előző két halmaznak az unióját adja meg az items
nevű függvény.
Korábban már említettünk, hogy a fájlok kezelésére a File objektumot használhatjuk.
Más nyelvekben már megszokhattuk, hogy a fájlokat különbözőképpen nyithatjuk meg: hozzáfűzésre, olvasásra és frissítésre. Hasonló lehetőségeket kínál az Io nyelv is.
Az openForAppending(optionalPath)
hozzáfűzésre nyitja meg a fájlt, vagyis a fájl végére írhatunk újabb információkat. Az openForReading(optionalPath)
nevű függvény olvasásra nyitja meg a fájlt, vagyis nem lesz írható a fájl. Előzőek kombinációja az openForUpdating(optinalPath)
függvény, amellyel olvashatjuk és írhatjuk is a fájlt.
Új fájlokat a create
nevű függvény segítségével tudunk létrehozni. Önmagával tér vissza vagy nil
objektummal a függvényhívás a futási eredménytől függően. Emellett temporaryFile
függvény segítségével ideiglenes fájlokat hozhatunk létre, melyek automatikusan törlésre kerülnek, ha a File objektum bezárta vagy a szemétgyűjtő törölte az objektumot.
A fájlok tartalmát végig iterálhatjuk illetve egy szekvenciában is megkaphatjuk. Az utóbbira a contents
nevű függvény való, míg az előbbire a foreach(optionalIndex, value, message)
és a foreachLine(optionalLineNumber, line, message)
függvények valók. A foreach függvény minden value-nyi bájtra végrehajtja a message-et. A foreachLine a fájl minden sorára végrehajtja a message-et.
A műveleteik során arra a választ, hogy a fájl végén vagyunk-e már a isAtEnd
függvény adja meg. Míg a fájl újbóli elejére ugrását a rewind
függvény oldja meg.
Fájlokat a könyvtáraknál megismert módon mozgathatjuk, törölhetjük: create
, remove
, moveTo
.
Dátumok kezelésére a Date objektumon keresztül van lehetőség. Ez az objektum az összes fontosabb tulajdonsággal fel van ruházva, amivel könnyen konvertálhatunk dátumokat időzónák között. Az utóbbi tulajdonság kimondottan hasznos, ha már tapasztaltuk azt, hogy egy több lokalizációval rendelkező szoftverfejlesztésekor a megfelelő időkezelés mennyi problémát és fejfájást okozhat a fejlesztőnek.
Az objektumban reprezentált dátumot a print
függvény segítségével írathatjuk ki, aminek a formátumát a format
függvény befolyásolja. Az alapértelmezett formátum a következő: „%Y-%m-%d %H:%M:%S %Z”.
A dátum formázás a C-ben jól megszokott konvenciókat követik:
Az időt lekérdezhetjük úgy, ahogy az RFC4287 definiálja. Erre való az asAtomDate
nevű függvény.
1970-től eltelt másodpercek számát az asNumber
függvénnyel kérdezhetjük le.
Egyes időzónák közötti konvertálást a convertToZone(offset, isDST)
függvénnyel oldhatjuk meg, míg UTC-be konvertálni a convertToUTC
függvénnyel tudunk.
A Date objektum egyes mezőit lekérdezhetjük egyenként a következő függvényekkel: zone
, year
, month
, day
, hour
, minute
, second
. Hasonló módon változtathatjuk meg az egyes mezőit: setHour(number)
, setMinute(number)
stb.
A dátumhoz hozzáadhatunk egy számot és ki is vonhatunk belőle. Erre szolgálnak a következő műveletek:
Véletlen számokat a Random objektumon keresztül generálni. Az objektum a Mersenne Twister algoritmust valósítja meg.
Véletlen szám generátoroknál be lehet állítani tetszőleges „kezdőértéket”, amiből indulva generálja a véletlen számokat. Az alapértelmezett kezdőértéket a C time és clock függvények kizáróvagyolása adja. Ezt természetesen átállíthatjuk általunk választottra a setSeed(number)
függvény segítségével.
Többféleképpen kérhetünk többfajta típusú véletlen számokat a generátortól.
Lehetőségünk van Gauss eloszlású véletlen számokat kérni a gaussian(optionalMean, optionalStandardDeviation)
függvény segítségével, ami 0 és 1 között véletlen számokkal tér vissza.
A value(optArg1, optArg2)
függvénnyel értékhatárokat definiálhatunk és azokon belül generál számunkra számokat:
Lehetőség van véletlen igaz, hamis értékek generálására is a flip
függvény segítségével.
A bytes(cnt)
függvény segítségével pedig cnt-nyi mennyiségű véletlen bájtokat lehet generáltatni.
A nyelv lehetőséget ad arra, hogy MySQL adatbázisokat kezelhessünk. A MySQL gyors, többszálú, több felhasználós SQL adatbázis szerver.
Egy rövid példa programot olvashatunk a következőkben:
A példa program egy adatbázis kapcsolatot hoz létre, mely segítségével két lekérdezést futtatunk le a jól ismert SQL lekérdező nyelv segítségével. Végül bezárja a kapcsolatot.
Kapcsolatot két függvénnyel is létesíthetünk adatbázis szerverekkel: establish
és a connect
.
Az adatbázis lekérdezés eredménye lehet egy lista vagy egy asszociatív tömb. A query(sqlQuery)
egy listával tér vissza, míg a queryThenMap(sqlQuery)
függvény egy asszociatív tömbbel. Az sqlQuery tetszőleges SQL lekérdezés lehet.
Adatbázis kapcsolatot a close
függvénnyel tudunk bezárni.