Javascript: check if file exists
In JavaScript programming, you’ll often have to determine the presence of a file within the file system. This guide covers how to check if a file exists in different JavaScript environments such as the browser, Node.js, and using third-party libraries.
Understanding the environment
JavaScript runs in multiple environments; in-browser, it's limited due to security concerns, while in server-side environments like Node.js, you have more freedom to access the file system.
Check file existence in the browser
In a browser context, direct file system access is restricted. You can only check if a file exists if the user has provided it, for example, through an <input>
element.
document.getElementById('fileInput').addEventListener('change', function(event) { const file = event.target.files[0]; if (file) { console.log('File exists:', file.name); } else { console.log('No file selected.'); } });
Check file existence in Node
Node.js provides the fs
module, which you can use to check if a file exists.
Using fs.existsSync
The fs.existsSync
method is the simplest synchronous way to check for file existence without reading the file.
const fs = require('fs'); const fileExists = fs.existsSync('path/to/file.txt'); console.log(fileExists); // true or false
Using fs.stat
or fs.access
For asynchronous checks, fs.stat
or fs.access
are the preferred methods. fs.access
is specifically designed to check permissions and, by default, will check for file existence.
const fs = require('fs'); fs.access('path/to/file.txt', fs.constants.F_OK, (err) => { console.log(err ? 'File does not exist' : 'File exists'); });
Using fs.promises
With the fs.promises
API, you can use async/await
for cleaner asynchronous code.
const fs = require('fs').promises; async function checkFileExists(file) { try { await fs.access(file, fs.constants.F_OK); console.log('File exists'); } catch { console.log('File does not exist'); } } checkFileExists('path/to/file.txt');
Using third-party libraries
Third-party libraries like axios
for HTTP requests or the jQuery
library for AJAX can be used to check the existence of a file over a network.
Using axios
const axios = require('axios'); async function checkFileExists(url) { try { const response = await axios.head(url); console.log(response.status === 200 ? 'File exists' : 'File does not exist'); } catch (error) { console.log('File does not exist'); } } checkFileExists('<http://example.com/file.txt>');
Using jQuery
$.ajax({ type: 'HEAD', url: '<http://example.com/file.txt>', success: function(){ console.log('File exists'); }, error: function() { console.log('File does not exist'); } });
Handling errors and exceptions
When checking file existence, especially in Node.js, it’s important to handle potential errors such as permissions issues, broken links, or network errors when checking remote files.
Watching for file presence
In scenarios where you need to watch for a file to appear or disappear, you can use fs.watch
in Node.js:
const fs = require('fs'); const filename = 'path/to/file.txt'; fs.watch(filename, (eventType, filename) => { if (eventType === 'rename') { console.log('File has been created or deleted.'); } });
Permissions considerations
Permissions can affect your ability to check for a file. Always ensure that the process has the appropriate permissions to avoid false negatives.
Cross-environment checks
Writing code that might run in different JavaScript environments requires checks that work in both the browser and server-side:
function checkFileExists(file) { if (typeof window !== 'undefined') { // Browser environment // ... browser-specific code } else if (typeof process !== 'undefined') { // Node.js environment const fs = require('fs'); return fs.existsSync(file); // or async variant with fs.access } }
Network error handling
When checking file existence over a network, implement retries and timeouts to handle latency and errors:
const axios = require('axios'); const axiosRetry = require('axios-retry'); axiosRetry(axios, { retries: 3, retryDelay: axiosRetry.exponentialDelay}); async function checkFileExists(url) { try { const response = await axios.head(url, { timeout: 5000 }); console.log('File exists'); } catch (error) { console.log('File does not exist or network error:', error.message); } }
Invite only
Fast. Opinionated. Collaborative. Local-first. Keyboard centric. Crafted to the last pixel. We've got 50 slots for Alpha access.
How to Remove Characters from a String in JavaScript
Jeremy Sarchet
How to Sort Strings in JavaScript
Max Musing
How to Remove Spaces from a String in JavaScript
Jeremy Sarchet
Detecting Prime Numbers in JavaScript
Robert Cooper
How to Parse Boolean Values in JavaScript
Max Musing
How to Remove a Substring from a String in JavaScript
Robert Cooper