File
File — File system operations.
Provides file I/O operations and lazy file streaming using Erlang's
file module. All operations are class methods. Errors use structured
#beamtalk_error{} records.
Examples
File exists: "test.txt"
File readAll: "test.txt"
File writeAll: "output.txt" contents: "hello"
File readBinary: "image.png"
File writeBinary: "output.bin" contents: data
File appendBinary: "log.bin" contents: data
(File lines: "data.csv") do: [:line | Transcript show: line]
File open: "data.csv" do: [:handle | handle lines take: 10]
@see System (for environment variables and OS information) @see Json (for reading/writing JSON files)
Methods
- class » exists: path
- class » readAll: path
- class » writeAll: path contents: text
- class » readBinary: path
- class » writeBinary: path contents: binary
- class » appendBinary: path contents: binary
- class » lines: path
- class » open: path do: block
- class » lastModified: path
- class » isDirectory: path
- class » isFile: path
- class » mkdir: path
- class » mkdirAll: path
- class » listDirectory: path
- class » delete: path
- class » deleteAll: path
- class » rename: from to: to
- class » absolutePath: path
- class » cwd
- class » tempDirectory
Class Methods
Test if a file exists at the given path (class method).
Examples
File exists: "test.txt" // => true or false
Read the entire contents of a file as a string (class method).
Returns Result ok: contents on success, or Result error: err on failure.
Examples
File readAll: "test.txt" // => Result ok: "file contents..."
Write text to a file, creating or overwriting it (class method).
Returns Result ok: nil on success, or Result error: err on failure.
Examples
File writeAll: "output.txt" contents: "hello"
Read the entire contents of a file as raw binary (class method).
Returns Result ok: binary on success, or Result error: err on failure.
Unlike readAll:, this does not assume the contents are a UTF-8 string.
Examples
File readBinary: "image.png" // => Result ok: <<...>>
Write binary data to a file, creating or overwriting it (class method).
Returns Result ok: nil on success, or Result error: err on failure.
Examples
File writeBinary: "output.bin" contents: data
Append binary data to a file, creating it if needed (class method).
Returns Result ok: nil on success, or Result error: err on failure.
Examples
File appendBinary: "log.bin" contents: data
Return a lazy Stream of lines from a file (class method).
Opens the file and returns Result ok: stream on success, or
Result error: err on failure. The Stream reads one line at a time
and closes the handle automatically when exhausted. Constant memory —
safe for large files.
Cross-process constraint: file-backed Streams must be consumed by the same process that created them.
Examples
(File lines: "data.csv") unwrap take: 5
(File lines: "log.txt") unwrap select: [:l | l includesSubstring: "ERROR"]
Block-scoped file handle with automatic cleanup (class method).
Opens the file, passes a FileHandle to the block, and ensures
the handle is closed when the block exits (normally or via exception).
Returns Result ok: blockResult on success, or Result error: err
on failure.
The handle responds to lines which returns a Stream of lines.
Both the handle and any Streams derived from it must be consumed
within the block — they must not escape, as the file descriptor
is closed when the block returns.
Examples
(File open: "data.csv" do: [:handle |
handle lines take: 10
]) unwrap
Get the last modification time of a file (class method).
Returns Result ok: DateTime on success, or Result error: err if the
file does not exist.
Examples
File lastModified: "test.txt" // => Result ok: a DateTime(...)
Test if a path refers to a directory (class method).
Examples
File isDirectory: "target" // => true or false
Test if a path refers to a regular file (class method).
Examples
File isFile: "test.txt" // => true or false
Create a directory (class method). Error if the parent does not exist.
Returns Result ok: nil on success, or Result error: err on failure.
Examples
File mkdir: "target/mydir"
Create a directory and all missing parent directories (class method).
Returns Result ok: nil on success, or Result error: err on failure.
Examples
File mkdirAll: "target/a/b/c"
List entries in a directory as a List of Strings (class method).
Returns Result ok: list on success, or Result error: err on failure.
Examples
File listDirectory: "target"
Delete a file or empty directory (class method).
Returns Result ok: nil on success, or Result error: err on failure.
Examples
File delete: "target/old.txt"
Recursively delete a directory tree (class method).
Returns Result ok: nil on success, or Result error: err on failure.
Examples
File deleteAll: "target/old-workspace"
Rename or move a file or directory (class method).
Returns Result ok: nil on success, or Result error: err on failure.
Examples
File rename: "old.txt" to: "new.txt"
Resolve a relative path to its absolute path (class method).
Returns Result ok: absPath on success, or Result error: err on failure.
Examples
File absolutePath: "target/test.txt"
Return the current working directory (class method).
Examples
File cwd // => "/home/user/projects/myapp"
Return the OS temporary directory path (class method).
Examples
File tempDirectory
Inherited Methods
From Object
Return the class of the receiver.
Examples
42 class // => Integer
"hello" class // => String
Test if the receiver is nil. Returns false for all objects except nil.
Examples
42 isNil // => false
nil isNil // => true
Test if the receiver is not nil. Returns true for all objects except nil.
Examples
42 notNil // => true
nil notNil // => false
If the receiver is nil, evaluate nilBlock. Otherwise return self.
Examples
42 ifNil: [0] // => 42
nil ifNil: [0] // => 0
If the receiver is not nil, evaluate notNilBlock with self.
Examples
42 ifNotNil: [:v | v + 1] // => 43
nil ifNotNil: [:v | v + 1] // => nil
If nil, evaluate nilBlock; otherwise evaluate notNilBlock with self.
Examples
42 ifNil: [0] ifNotNil: [:v | v + 1] // => 43
nil ifNil: [0] ifNotNil: [:v | v + 1] // => 0
If not nil, evaluate notNilBlock with self; otherwise evaluate nilBlock.
Examples
42 ifNotNil: [:v | v + 1] ifNil: [0] // => 43
nil ifNotNil: [:v | v + 1] ifNil: [0] // => 0
Return a developer-readable string representation.
Default implementation returns "a ClassName". Subclasses such as
Integer, String, and List override this to return richer output.
Examples
42 printString // => "42"
Return a user-facing string representation for display purposes.
Default implementation delegates to printString. Subclasses such as
String and Symbol override this to return a more readable form without
developer annotations (e.g. no surrounding quotes or # prefix).
Examples
42 displayString // => "42"
Inspect the receiver.
Examples
42 inspect // => "42"
Return the receiver itself. Useful for cascading side effects.
Examples
42 yourself // => 42
Return a hash value for the receiver.
Examples
42 hash
Test if the receiver responds to the given selector.
Examples
42 respondsTo: #abs // => true
Return the names of fields.
Examples
42 fieldNames // => #()
Return the value of the named field.
Examples
object fieldAt: #name
Set the value of the named field (returns new state).
Examples
object fieldAt: #name put: "Alice"
Send a unary message dynamically.
Examples
42 perform: #abs // => 42
Send a message dynamically with arguments.
Examples
3 perform: #max: withArguments: #(5) // => 5
Raise an error indicating this method must be overridden by a subclass.
Examples
self subclassResponsibility
Raise an error indicating this method has not yet been implemented.
Use this for work-in-progress stubs. Distinct from subclassResponsibility,
which signals an interface contract violation.
Examples
self notImplemented
Send aValue to the current transcript without a trailing newline.
Nil-safe: does nothing when no transcript is set (batch compile, tests).
Examples
42 show: "value: "
Send aValue to the current transcript followed by a newline.
Nil-safe: does nothing when no transcript is set (batch compile, tests).
Examples
42 showCr: "hello world"
Test if the receiver is an instance of aClass or any of its subclasses.
Examples
42 isKindOf: Integer // => true
42 isKindOf: Object // => true
#foo isKindOf: Symbol // => true
#foo isKindOf: String // => false
Raise an error with the given message.
Examples
self error: "something went wrong"
From ProtoObject
Test value equality (Erlang ==).
Examples
42 == 42 // => true
"abc" == "abc" // => true
Test value inequality (negation of ==).
Examples
1 /= 2 // => true
42 /= 42 // => false
Return the class of the receiver.
Examples
42 class // => Integer
"hello" class // => String
Handle messages the receiver does not understand. Override for custom dispatch.
Examples
42 unknownMessage // => ERROR: does_not_understand
Send a message dynamically with an arguments list.
Examples
42 perform: #abs withArguments: #() // => 42
Execute a class method in the caller's process, bypassing gen_server dispatch.
The caller takes responsibility for knowing the method does not mutate class state. Useful for long-running class methods that would otherwise block the class object's gen_server.
Limitations: only resolves methods defined directly on the target class
module (does not walk the superclass chain). Class variables and self
are not available to the method (nil and #{} are passed).
Examples
MyClass performLocally: #run:ctx: withArguments: #(input, ctx)
Send a message dynamically with an arguments list and explicit timeout.
The timeout (in milliseconds or #infinity) applies to the gen_server:call
when the receiver is an actor. For value types, timeout is ignored.
Examples
actor perform: #query withArguments: #(sql) timeout: 30000