Files
File Constructors
// construct from Uri
f := File.make(`dir/foo.txt`) // longhand
f := File(`dir/foo.txt`) // shorthand for above
f := `dir/foo.txt`.toFile
// construct from OS specific path
f := File.os("bin\\command.exe")
f := File.os("bin" + File.sep + "command.exe")
// construct File instance resolved against base directory
f := dir + `foo.txt`
f := dir + `subdir/foo.txt`
f := dir + `../foo.txt`
File Naming
f := `/files/today/foo.txt`.toFile
f.uri => `/files/today/foo.txt`
f.path => ["files", "today", "foo.txt"]
f.pathStr => "/files/today/foo.txt"
f.name => "foo.txt"
f.basename => "foo"
f.ext => "txt"
f.parent.path => ["files", "today"]
f.osPath => "\files\today\foo.txt"
Working with Directories
// check if file is a directory
f.isDir
// list all files in a directory (files and dirs)
files := dir.list
// list file names in a directory
filenames := Str[,]
dir.list.map(filenames) |File f->Str| { return f.name }
// get sub directories (filter out files)
subdirs := dir.list.findAll |File f->Bool| { return f.isDir }
// get child files (filter out sub directories)
files := dir.list.findAll |File f->Bool| { return !f.isDir }
// create directory (uri must end in / slash)
dir.create
Reading Files
// read entire text file into a string
s := f.readAllStr
// read entire text file into a list of string lines
lines := f.readAllLines
// process each line
f.eachLine |Str line| { processLine(line) }
// read entire binary file into memory
buf := f.readAllBuf
// read file using encoding other than UTF-8
in := f.in
in.charset = Charset.utf16BE
lines := in.readAllLines
in.close
// read binary file stream
in := f.in
b := in.read
s := in.readU2
i := in.readU4
in.close
// serialize object from file
obj := f.readObj
Writing Files
// create empty file (uri must not end in / slash)
f.create
// write text file (overwrites existing)
f.out.printLine("hello").close
// append to existing text file
f.out(true).printLine("hello").close
// write text file using encoding other than UTF-8
out := f.out
out.charset = Charset.fromStr("ISO-8859-2")
out.printLine("hello world")
out.close
// write list of lines to file
out := f.out
lines.each |Str line| { out.printLine(line) }
out.close
// write binary file
out := f.out
out.writeI4(0xcafebabe)
out.close
// serialize object to file
f.writeObj(obj, ["indent":2])
Random Access
// open file for read/write random access
buf := f.open("rw")
// read last 4 bytes of file
bytes := buf.seek(-5).readBuf(null, 4)
// append to end of file
buf.seek(-1).write(0xff)