Table of Contents
Working with Files from MATLAB
In many projects you will not only compute and plot, you will also need to organize input data, write output, and keep track of many files. MATLAB includes commands that let you inspect folders, create and remove directories, and copy, move, and delete files directly from the Command Window or from scripts. This chapter focuses on these basic file management tasks, not on reading or writing the contents of files, which is handled in other chapters.
Viewing and Navigating Folders
MATLAB always has a current folder. Most file operations without full paths use this folder as the starting point. You see it in the Current Folder panel and in the field at the top of the desktop, but you can also work with it using commands.
To find the current folder, use pwd, which stands for "print working directory". For example:
pwdMATLAB displays the full path to the current folder as a character vector.
To change the current folder from the Command Window you use cd. Pass either an absolute path or a path relative to the current folder:
cd('C:\Users\yourname\Documents\MATLAB')
cd ../data
In the first command MATLAB jumps to the specified folder. In the second it moves one level up with .. then into the data subfolder. On Windows you can use either \ or / in paths, on macOS and Linux you use /.
To list the contents of the current folder use dir:
dir
This displays files and subfolders with sizes and dates. You can also pass a pattern to dir to narrow the list. For example, to list only MAT-files or only text files:
dir('*.mat')
dir('*.txt')
You can also use a relative or absolute folder path with dir, which has no effect on the current folder itself:
dir('..\raw_data')MATLAB shows the listing for that folder while keeping the current folder unchanged.
Building and Inspecting File Paths
When you manage files from MATLAB it is safer to construct paths programmatically instead of typing long paths manually. This is especially important if your code needs to run on different operating systems.
The function fullfile joins folder names and file names into a single path using the correct file separators for the running platform. For example:
folder = 'data';
name = 'results.csv';
filepath = fullfile(folder, name)
The variable filepath becomes something like data/results.csv or data\results.csv depending on your system. You can nest folders:
filepath = fullfile('project', 'outputs', 'results.csv');
To test whether a file or folder exists before you operate on it, use exist with a second argument:
exist('notes.txt','file') % returns 2 if a file exists
exist('myfolder','dir') % returns 7 if a folder exists
If you already have a full path, you can split it into parts with fileparts. This helps when you want to change only the name or the extension:
p = 'C:\data\experiment1\signal.dat';
[folder, name, ext] = fileparts(p);
After this call folder contains the folder part, name the base file name without extension, and ext the extension including the dot.
Creating and Removing Folders
You can create new folders directly from MATLAB with mkdir. The simplest form takes the new folder name. MATLAB will create it relative to the current folder if you do not provide a full path:
mkdir('results')
mkdir('C:\data\project1')If intermediate folders are missing, MATLAB creates them as needed.
To remove a folder use rmdir. By default rmdir only removes empty folders:
rmdir('old_results')
If the folder contains files or subfolders you can pass a second argument 's' to remove the folder and its contents recursively:
rmdir('temp','s')Use the recursive option with care, because it will permanently remove everything inside that folder.
Copying and Moving Files
MATLAB includes commands to copy and move files without leaving the environment. To copy a file you use copyfile. The first argument is the source, the second argument is the destination. Both can be file names or folder names.
To copy a single file to a new name in the same folder:
copyfile('data.csv','data_backup.csv')
To copy a file into a different folder, you can use fullfile to build the destination path:
src = 'data.csv';
dest = fullfile('backup','data.csv');
copyfile(src, dest)
If the destination is a folder, MATLAB creates a copy with the same name inside that folder. copyfile can also copy whole folders including subfolders by giving a folder name as the source.
To move or rename files you use movefile. The syntax is similar to copyfile. To rename a file in the same folder:
movefile('oldname.txt','newname.txt')To move a file into a different folder:
movefile('report.pdf', fullfile('reports','report.pdf'))
Just like copyfile, movefile can work with entire folders as sources and destinations.
Both copyfile and movefile can return status information if you capture output arguments. This allows you to check whether the operation succeeded and view any error message text programmatically.
Deleting Files Safely
To delete a file from MATLAB you use delete. You can pass one file or several, and you can use patterns:
delete('temp.txt')
delete('*.tmp')
delete('*.tmp') removes all files with the .tmp extension in the current folder. These operations cannot be undone from MATLAB, so you should use them carefully, especially when you use wildcard patterns.
Before you delete, you can use dir to inspect the files that match your pattern, or you can use exist to confirm that the specific file you are about to remove actually exists:
if exist('temp.txt','file') == 2
delete('temp.txt')
end
This form avoids an error if the file is missing when the delete command runs.
Using Relative Paths and the Current Folder
When you work with many files it is usually better to write your code so that it uses relative paths based on the current folder instead of absolute paths that refer to a specific user or drive. Relative paths help your scripts and functions run on different machines and in different locations.
The basic relative path components are:
. refers to the current folder.
.. refers to the parent folder.
For example, if the current folder is C:\project\code, then:
..\data refers to C:\project\data.
.\output refers to C:\project\code\output.
You can combine these with fullfile to keep your path building readable:
dataFolder = fullfile('..','data');
infile = fullfile(dataFolder,'measurements.csv');
Your scripts can also change the current folder with cd, but it is often clearer to leave the current folder unchanged and build full paths to files using a known base folder. You can obtain the folder of the running script with functions that are specific to scripts and functions, then build paths relative to that folder. This approach helps avoid confusion when users run code from different starting folders.
Inspecting File Information
Sometimes you need more information about a file than just its name. The output of dir is a structure array that contains one element per file or folder, with fields such as name, folder, date, bytes, and an isdir flag.
For example:
info = dir('results.csv');
Now info.bytes contains the file size in bytes and info.date contains the last modification time as text. If your pattern matches several files, info becomes an array and you can index into it or loop over it.
You can also use dir without arguments to obtain information for everything in the current folder and then filter in MATLAB instead of in the pattern. This gives you more flexibility when you want to select based on size or modification date.
Simple Automation with File Operations
File management commands are often used inside scripts to automate repeated tasks, such as processing all files of a certain type in a folder or creating backup copies of results. A typical pattern is to use dir to get a list of files that match a pattern, then loop over the result with commands such as fullfile, copyfile, or movefile.
For instance, you might take all .csv files in a folder and copy them to a backup folder:
files = dir('*.csv');
for k = 1:numel(files)
src = fullfile(files(k).folder, files(k).name);
dest = fullfile('backup', files(k).name);
copyfile(src, dest);
end
In this example you do not have to type each file name manually. MATLAB discovers them with dir and you build full paths using the folder and name fields. This pattern appears often in scripts that prepare data for later analysis.
Key points to remember:
Use pwd and cd to inspect and change the current folder, and dir to list files.
Use fullfile to build paths in a platform independent way and exist to test for files and folders before operating on them.
Use mkdir and rmdir to create and remove folders, and be very cautious with rmdir(...,'s') which removes folders recursively.
Use copyfile and movefile to copy, move, and rename files or folders, and delete to remove files, especially careful when you use wildcard patterns like *.tmp.
Prefer relative paths and programmatically built file paths when writing scripts, so your code remains portable and easier to reuse.