What does the fileread function do in MATLAB / RunMat?
fileread(filename) loads the complete contents of a text file into memory and returns a row vector of characters that mirrors MATLAB's behaviour. The builtin preserves all bytes, including newlines and extended ASCII characters, so downstream code can parse, split, or convert the text as needed.
How does the fileread function behave in MATLAB / RunMat?
- Accepts paths provided as character vectors or string scalars. String arrays must contain exactly one element.
- Supports an optional encoding argument:
fileread(filename, encoding)orfileread(filename, 'Encoding', encoding). Recognised values includeauto(default),utf-8,ascii,latin1, andraw. - Resolves relative paths with respect to the current working directory of the RunMat process, just like MATLAB.
- Returns a
1×Ncharacter array. Empty files yield a1×0character vector. - Leaves line endings untouched (
\r,\n, or\r\n) so scripts can inspect original formatting. - When
autodecoding detects invalid UTF-8 sequences, RunMat maps each byte to the corresponding extended-ASCII code point so that callers can recover the raw data. - Throws a descriptive error when the file cannot be opened or read.
fileread Function GPU Execution Behaviour
fileread performs synchronous host I/O and never dispatches GPU work. If the provided file name lives on the GPU (for example, produced by a GPU array that was gathered lazily), RunMat gathers that scalar first. File contents are returned as an ordinary character array that resides on the CPU. Providers do not need to implement any hooks for this builtin.
Examples of using the fileread function in MATLAB / RunMat
Read Entire File Into A Character Vector
text = fileread("LICENSE.md");
Expected output:
% Character vector containing the full license text
Read A File Using A Relative Path
text = fileread("data/config.json");
Expected output:
% Returns the JSON file contents as a character vector
Preserve Extended ASCII Bytes
bytes = fileread("fixtures/high_ascii.txt");
double_values = double(bytes);
Expected output:
% double_values contains the numeric codes for every byte in the file
Convert File Contents To A String Scalar
raw = fileread("README.md");
doc = string(raw);
Expected output:
% doc is a string scalar ready for further processing
Read A File With UTF-8 Decoding Explicitly
text = fileread("data/report.txt", 'Encoding', 'utf-8');
Expected output:
% Character vector decoded using UTF-8. An error is thrown if the bytes are not valid UTF-8.
Handle Missing Files With Try/Catch
try
fileread("missing.txt");
catch err
disp(err.message);
end
Expected output:
% Prints a descriptive error such as:
% "fileread: unable to read 'missing.txt' (No such file or directory)"
FAQ
What does fileread return?
It returns a 1×N character vector containing every byte from the file. Convert it to a string with string(...) when you prefer string scalars.
Does fileread change line endings?
No. The builtin preserves whatever newline sequence the file uses so downstream tools can handle formatting explicitly.
Can fileread read binary data?
While designed for text, fileread will happily return any bytes. The result is a character vector whose numeric codes match the file's bytes.
How are encodings handled?
The default auto mode attempts UTF-8 decoding and, if the data is not valid UTF-8, falls back to mapping each byte to its extended-ASCII code point (latin1). Provide an explicit encoding such as 'utf-8', 'latin1', 'ascii', or 'raw' to control the conversion. Explicit encodings raise descriptive errors when the bytes are incompatible with the requested format.
Can I force raw byte behaviour?
Yes. Specify 'raw' (or 'bytes') as the encoding argument to receive a character vector whose code points equal the file's bytes.
How do relative paths resolve?
Relative paths are evaluated against the current working directory of the RunMat process. Use pwd or cd to control where fileread looks.
See Also
fopen, fread, string, strlength
Source & Feedback
- Implementation:
crates/runmat-runtime/src/builtins/io/filetext/fileread.rs - Found an issue? Open a GitHub ticket with a minimal reproduction.